Redis常見資料類型

來源:互聯網
上載者:User

標籤:列表   隊列   常用   通過   car   訊息佇列   nbsp   跳躍表   雙向   

String
  1. 常用命令:  
  2. get、set、incr、decr mget等操作,普通的key/value儲存都可以歸為此類
Hash
  1. 常用命令:  
  2. hget,hset,hgetall 等。
List(隊列)
  1. 常用命令:  
  2. lpush,rpush,lpop,rpop,lrange,BLPOP(阻塞版)等。  
  3. 應用情境: 

    Redis list的應用情境非常多,也是Redis最重要的資料結構之一。  

    我們可以輕鬆地實現最新訊息排行等功能。  

    Lists的另一個應用就是訊息佇列,可以利用Lists的PUSH操作,將任務存在Lists中,然後背景工作執行緒再用POP操作將任務取出進行執行。

實現方式:  

    Redis list的實現為一個雙向鏈表,即可以支援反向尋找和遍曆,更方便操作,不過帶來了部分額外的記憶體開銷,Redis內部的很多實現,包括髮送緩衝隊列等也都是用的這個資料結構。 

Set
  1. 常用命令:  
  2.     sadd,srem,spop,sdiff ,smembers,sunion 等。  
  3. 應用情境:  
  4.     Redis set對外提供的功能與list類似是一個列表的功能,特殊之處在於set是可以自動排重的,當你需要儲存一個列表資料,又不希望出現重複資料時,set是一個很好的選擇,並且set提供了判斷某個成員是否在一個set集合內的重要介面,這個也是list所不能提供的。  
  5.     比如在微博應用中,每個人的好友存在一個集合(set)中,這樣求兩個人的共同好友的操作,可能就只需要用求交集命令即可。  
  6.     Redis還為集合提供了求交集、並集、差集等操作,可以非常方便的實
Sort Set

  

  1. 常用命令:  
  2.     zadd,zrange,zrem,zcard等  
  3.   使用情境:  
  4.     以某個條件為權重,比如按頂的次數排序.  
  5.     ZREVRANGE命令可以用來按照得分來擷取前100名的使用者,ZRANK可以用來擷取使用者排名,非常直接而且操作容易。  
  6.     Redis sorted set的使用情境與set類似,區別是set不是自動有序的,而sorted set可以通過使用者額外提供一個優先順序(score)的參數來為成員排序,並且是插入有序的,即自動排序。  
  7.     比如:twitter 的public timeline可以以發表時間作為score來儲存,這樣擷取時就是自動按時間排好序的。  
  8.     比如:全班同學成績的SortedSets,value可以是同學的學號,而score就可以是其考試得分,這樣資料插入集合的,就已經進行了天然的排序。  
  9.     另外還可以用Sorted Sets來做帶權重的隊列,比如普通訊息的score為1,重要訊息的score為2,然後背景工作執行緒可以選擇按score的倒序來擷取工作任務。讓重要的任務優先執行。  
  10.     需要精準設定到期時間的應用  
  11.     比如你可以把上面說到的sorted set的score值設定成到期時間的時間戳記,那麼就可以簡單地通過到期時間排序,定時清除到期資料了,不僅是清除Redis中的到期資料,你完全可以把Redis裡這個到期時間當成是對資料庫中資料的索引,用Redis來找出哪些資料需要到期刪除,然後再精準地從資料庫中刪除相應的記錄。  
  12.   實現方式:  
  13.     Redis sorted set的內部使用HashMap和跳躍表(SkipList)來保證資料的儲存和有序,HashMap裡放的是成員到score的映射,而跳躍表裡存放的是所有的成員,排序依據是HashMap裡存的score,使用跳躍表的結構可以獲得比較高的尋找效率,並且在實現上比較簡單。  
訊息訂閱

  

  1.  Pub/Sub  
  2.     Pub/Sub 從字面上理解就是發布(Publish)與訂閱(Subscribe),在Redis中,你可以設定對某一個key值進行訊息發布及訊息訂閱,  
  3.     當一個key值上進行了訊息發布後,所有訂閱它的用戶端都會收到相應的訊息。這一功能最明顯的用法就是用作即時訊息系統,比如普通的即時聊天,群聊等功能。  
  4. 用戶端1:subscribe  rain  
  5. 用戶端2:PUBLISH  rain "my love!!!"  
  6.     (integer) 2 代表有幾個客訂閱了這個訊息  
transaction
  1.  Redis還提供了一個Watch功能,你可以對一個key進行Watch,然後再執行Transactions,在這過程中,如果這個Watched的值進行了修改,那麼這個Transactions會發現並拒絕執行。  

Session 1  

    (1)第1步  

    redis 127.0.0.1:6379> get age  

    "10"  

    redis 127.0.0.1:6379> watch age  

    OK  

    redis 127.0.0.1:6379> multi  

    OK  

    redis 127.0.0.1:6379>  

Session 2  

    (2)第2步  

    redis 127.0.0.1:6379> set age 30  

    OK  

    redis 127.0.0.1:6379> get age  

    "30"  

    redis 127.0.0.1:6379>  

Session 1     

    (3)第3步  

    redis 127.0.0.1:6379> set age 20  

    QUEUED  

    redis 127.0.0.1:6379> exec  

    (nil)  

    redis 127.0.0.1:6379> get age  

    "30"  

    redis 127.0.0.1:6379>  

    第一步,Session 1 還沒有來得及對age的值進行修改  

  第二步,Session 2 已經將age的值設為30  

  第三步,Session 1 希望將age的值設為20,但結果一執行返回是nil,說明執行失敗,之後我們再取一下age的值是30,這是由於Session   1中對age加了樂觀鎖導致的。

Redis常見資料類型

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.