Redis的五種資料型別及應用場景
阿新 • • 發佈:2020-07-21
一、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...] //交集計算