Redis-資料結構與高效能原理
阿新 • • 發佈:2021-10-04
資料結構
字串String
常用操作
//存入字串鍵值對 SET key value //批量儲存字串鍵值對 MSET key value [key value ...] //存入一個不存在的字串鍵值對 SETNX key value //獲取一個字串鍵值 GET key //批量獲取字串鍵值 MGET key [key ...] //刪除一個鍵 DEL key [key ...] //設定一個鍵的過期時間(秒) EXPIRE key seconds 原子加減 //將key中儲存的數字值加1 INCR key //將key中儲存的數字值減1 DECR key //將key所儲存的值加上increment INCRBY key increment //將key所儲存的值減去decrement DECRBY key decrement應用場景
- 單值快取
- 物件快取
- 分散式鎖
- 計數器
- Web叢集session共享
- 分散式系統全域性序列號
雜湊Hash
常用操作
//儲存一個雜湊表key的鍵值 HSET key field value //儲存一個不存在的雜湊表key的鍵值 GSETNX key field value //在一個雜湊表key中儲存多個鍵值對 HMSET key field value [field value ...] //獲取雜湊表key對應的field鍵值 HGET key field //批量獲取雜湊表key中多個field鍵值 HMGET key field [field ...] //刪除雜湊表key中的field鍵值 HDEL key field [field ...] //返回雜湊表key中的field的數量 HLEN key //返回雜湊表key中的所有的鍵值 HGETALL key //為雜湊表key中field鍵的值加上增量increment HINCRBY key field increment應用場景
- 電商購物車
- 以使用者id為key
- 以商品id為field
- 商品數量為value
- 購物車操作
- 新增商品
- 增加數量
- 商品總數
- 刪除商品
- 獲取購物車所有商品
優缺點
- 優點
- 同類資料歸類整合儲存,方便資料管理
- 相比string操作消耗記憶體與cpu更小
- 相比string儲存更節省空間
- 缺點
- 過期功能不能使用在field上,只能用在key上
- Redis叢集架構下不適合大規模使用
列表List
常用操作
//將一個或多個值value插入到key列表的表頭(最左邊) LPUSH key value [value ...] //將一個或多個值value插入到key列表的表尾(最右邊) RPUSH key value [value ...] //移除並返回key列表的頭元素 LPOP key //移除並返回key列表的尾元素 RPOP key //返回列表key中指定區間內的元素,區間以偏移量start和stop指定 LRANGE key start stop //從key列表表頭彈出一個元素,若列表中沒有元素,阻塞等待timeout秒,如果timeout=0,一直阻塞等待 BLPOP key [key ...] timeout //從key列表表尾彈出一個元素,若列表中沒有元素,阻塞等待timeout秒,如果timeout=0,一 直阻塞等待 BRPOP key [key ...] timeout常用資料結構
- Stack = LPUSH + LPOP = FILO
- Queue = LPUSH + RPOP = FIFO
- Blocking MQ = LPUSH + BRPOP
應用場景
- 微博、微信公眾號資訊流
集合Set
常用操作
//往集合key中存入元素,元素存在則忽略,若key不存在則新建 SADD key member [member ...] //從集合key中刪除元素 SREM key member [member ...] //獲取集合key中所有元素 SMEMBERS key //獲取集合key的元素個數 SCARD key //判斷member元素是否存在與集合key中 SISMEMBER key member //從集合key中選出count個元素,元素不從key中刪除 SRANDMEMBER key [count] //從集合key中選出count個元素,元素從key中刪除 SPOP key [count]運算操作
//交集運算 SINTER key [key ...] //將交集結果存入新集合destination中 SINTERSTORE destination key [key ...] //並集運算 SUNION key [key ...] //將並集結果存入新集合destination中 SUNIONSTORE destination key [key ...] //差集運算 SDIFF key [key ...] //將差集結果存入新集合destination中 SDIFFSTORE desination key [key ...]應用場景
- 點選參與抽獎加入集合
- 檢視參與抽獎所有使用者
- 抽取count名中將者
- 微信、微博點贊、收藏、標籤
有序集合Zset
常用操作
//往有序集合key中加入帶分值元素 ZADD key score member [[score member] ...] //從有序集合key中刪除元素 ZREM key member [member ...] //返回有序集合key中元素member的分值 ZSCORE key member //為有序集合key中元素member的分值加上increment ZINCRBY key increment member //返回有序集合key中元素個數 ZCARD key //正序獲取有序集合key從start下標到stop下標的元素 ZRANGE key start stop [WITHSCORES] //倒序獲取有序集合key從start下標到stop下標的元素 ZREVRANGE key start stop [WITHSCORES]集合操作
//並集計算 ZUNIONSTORE destkey numeys key [key ...] //交集計算 ZINTERSTORE destkey numbers key [key ...]應用場景
- 實現排行榜
- 點選新聞
- 當日排行前十
- 搜尋榜單
- 七日排行前十