1. 程式人生 > 實用技巧 >Redis的五種資料型別及應用場景

Redis的五種資料型別及應用場景

一、String

應用場景:微博數、粉絲數等

特性:此型別和memcache相似,作為常規的key-value快取應用,一個鍵最大能儲存512MB。

操作命令:

字串常用操作
SET key value                  //存入字串鍵值對
MSET key value [key value]     //批量儲存字串鍵值對
SETNX key value                //存入一個不存在的字串鍵值對(原子操作),返回1=獲取鎖成功 0=獲取鎖失敗
GET key                        //獲取一個字串鍵值
MGET key [key...]              //批量獲取字串鍵值
DEL key [key...]               //刪除一個鍵 (SETNX執行完釋放業務鎖)
EXPIRE key seconds             //設定一個鍵的過期時間(秒)

原子加減   
INCR key                       //將key中儲存的數字值加1
DECR key                       //將key中儲存的數字值減1
INCRBY key increment           //將key所儲存的值加上increment
DECRBY key decrement           //將key所儲存的值減去decrement

二、Hash

應用場景:購物車快取資料,key:{userId} filed:{productId} value:{num}

特性:經常用於儲存比較複雜的結構,hash只要求鍵不一樣,與mysql資料庫中儲存的一條記錄極為相似。

操作命令:

HSET key field value                      //儲存一個雜湊表key的鍵值
HSETNX key field value                    //儲存一個不存在的雜湊表key的鍵值(原子操作)
HMSET key field value [field value...]    //在一個雜湊表key中儲存多個鍵值對
HGET key field                            //獲取雜湊表key對應的field鍵值
HMGET key field [field...]                //批量獲取雜湊表key中多個field鍵值
HDEL key field [field...]                 //刪除雜湊表key中的field鍵值
HLEN key                                  //返回雜湊表key中field的數量
HGETALL key                               //返回雜湊表key中所有的鍵值
HNCRBY key field increment                //為雜湊表key中field鍵的值加上增量increment

優點:1.同類資料歸類整合儲存,方便資料管理

2.相比於string消耗的記憶體和cpu更小

3.相比於string儲存更節省空間

缺點:1.過期功能不能使用在field上,只能使用在key上

2.Redis叢集架構不適合大規模使用,易導致記憶體傾斜。

三、List

應用場景:使用者評論彈幕、朋友圈評論,key:{bulledCaht} List:{contentList}。

操作命令:

LPUSH key value [value...]      //將一個或多個值value插入到key列表的表頭(最左邊)
RPUSH key value [value...]      //將一個或多個值value插入到key列表的表尾(最右邊)
LPOP key                        //移除並返回key列表的頭元素
RPOP key                        //移除並返回key列表的尾元素
LRANGE key start stop           //返回列表中指定的區間內的元素,區間已偏移量start和stop指定
BLPOP key [key...] timeout      //從key列表的表頭彈出一個元素,若列表中沒有元素,阻塞等待timeout秒,如果timeout=0則一直阻塞等待
BRPOP key [key...] timeoout     //從key列表的表尾彈出一個元素,若列表中沒有元素,阻塞等待timeout秒,如果timeout=0則一直阻塞等待

四、Set

應用場景:關注、您可能認識的人。

特性:無序的方式儲存多個不同的元素,對元素可以進行快速的新增、查詢和刪除,相同的元素只算一個。

set元素最大包含(2的32次方-1)個元素,除了基本的增刪改查還可以取並集(union)交集(intrersection)差集(difference),通過這些很容易實現了好友推薦的功能。

操作命令:

Set常規操作
SADD key member [member...] //往結合key中存入元素,元素存在則忽略,key不存在則新建
SREM key member [member...] //從集合key中刪除元素
SMEMBERS key //獲取元素key中所有元素
SCARD key //獲取集合key的元素個數
SISMEMBER key member //判斷member元素是否存在於集合key中
SRANDMEMBER key [count] //從集合key中選出count個元素,元素不從key中刪除
SPOP key [count] //從集合key中選出count個元素,元素從key中刪除

Set運算操作
SINTER key [key...] //交集運算
SINTERSTORE destination key [key...] //將交集結果存入新集合destination中
SUNION key [key...] //並集運算
SUNIONSTORE destination key [key...] //將並集結果存入新集合destination中
SDIFF key [key...] //差集運算
SDIFFSTORE destination key [key...] //將差集結果存入新集合destination中

五、ZSet

應用場景:朋友圈點贊排序、排行榜

特性:相對於Set,ZSet多了一個Score作為權重,使集合裡面的元素可以按照Score排序,注意它是Set,所以它裡面的元素也不能重複。

Redis sorted set的內部使用HashMap和跳躍表(SkipList)來保證資料的儲存和有序,HashMap裡放的是成員到score的對映,跳躍表按score從小到大儲存所有集合元素。使用跳躍表的結構可以獲得比較高的查詢效率,並且在實現上比較簡單。時間複雜度與紅黑樹相同,增加、刪除的操作較為簡單。 操縱命令:
ZSet常用操作
ZADD key score member [[score member]...]     //往有序集合key中加入帶分值元素
ZREM key member [member...]                   //從有序集合key中刪除元素
ZSCORE key member                             //返回有序集合key中元素member的分值
ZINCRBY key increment member                  //為有序集合key中元素member的分值加上increment
ZCARD key                                     //返回有序集合key中元素個數
ZRANGE key start stop [WITHSCORES]            //正序獲取有序集合key從start下標到stop下標的元素
ZREVRANGE key start stop [WITHSCORES]         //倒序獲取有序集合key從start下標到stop下標的元素

ZSet集合操作
ZUNIONSTORE destkey numkeys key [key...]      //並集計算
ZINTERSTORE destkey numkeys key [key...]      //交集計算