Redis基本資料型別

深海藍山發表於2017-04-24

概述

Redis的鍵值可以使用資料型別:字串,雜湊表,列表,集合,有序集合,點陣圖,計數器,地理空間

1.字串(string)

儲存整數和字串,有些人也用來儲存json/pb等序列化資料,並不推薦,浪費記憶體。

2.雜湊表(hashes)

儲存配置物件(比如儲存讀取修改使用者、商品屬性),優點是可以存取部分key,對於以常變化的或部分key要求atom操作的適合。

我們經常將一些結構化的資訊打包成hasmap,在客戶端序列化儲存為一個字串值(一般為json)格式,比如使用者的暱稱、年齡、積分等。這時候在需要修改其中某一項時,通常需要將字串(json)取出來,然後進行返序列化,修改某一項的值,再序列化成字串(json)儲存回去。簡單修改一個屬性就幹這麼多事情,消耗很大的,也不適用於一些可能併發操作的場合(比如兩個併發操作都需要修改積分)。而Redis的Hash結構可以使你像在資料庫中Update一個屬性一樣只修改某一項的值。

3.列表(list)

可以用來存最新使用者動態,時間軸,優點是有序,缺點是元素可重複,不去重。微博時間軸、訊息對列

4.集合(sets)

無序,唯一,對於要求嚴格唯一性的可以使用,可以用來去重。比如在微博應用中,可以將一個使用者所有的關注存在一個集合中,將其所有粉絲存在一個集合。因為Redis非常人性化的為集合提供了求交集、並集、差集等操作,那麼就可以非常方便的實現 如共同關注、共同喜好、二度好友的功能,對上面的所有集合操作,你還可以使用不同的命令選擇將結果返回給客戶端還是存到一新的集合中

1 共同好友  2 利用唯一笥,可以統計訪問網站的所有獨立IP  3好友推薦,根據tag求交集,大於某個門檻就可以推薦

5.有序集合(sorted sets)

集合的有序版,很好用,排名之類的複雜場景可以考慮。和sets相比,Sorted Sets是將Set中的元素增加了一個權重引數score,使得集合中的元素能夠按score進行有序排列,比如現代戰爭儲存全班同學成績的SortedSets,其集合value可以是同學的學號,而score就可以是其考試得分,這樣在資料插入集合的時候 ,就已經進行了天然的排序。另外還可以用Sorted Sets來做帶權重的佇列,比如普通訊息的score為1,重要訊息的score為2,然後工作執行緒可以選擇score的倒序來獲取工作任務。讓重要的任務優先執行

示例:1.帶有權重的元素,比如一個遊戲的使用者得分排行榜  2.一般用到的場景不算太多

6.點陣圖(bit maps)

這個不是新增的資料型別,只是可以把字串型別按照單個位的形式操作。可以用來統計活躍使用者,實現使用者簽到功能,效能頗高。不過統計活躍使用者建議是增量讀取日誌或者引入訊息中介軟體非同步刷到redis,非業務必須功能最好不要影響線上業務,特別是這種門戶業務更是重中之重。

7.計數器(hyperloglogs)

新增元素只記錄元素個數,並不會儲存元素本身,節省空間並且避免重複count,這個感覺直接用incr就可以實現 。基於基數估算的演算法,只能比較準確地人教版出基數。

8.地理空間(geospatial indexes)

用來做地理位置查詢,比如兩點之間的距離,一個點附近有多少元素,適合點比較固定的場景,或者只考慮當前位置的場景,像附近的人這種就不適合,一是需要考慮某段時間內的點,二是點經常更新,壓力比較大。


相關文章