redis-zset

zset 有序集合,不能重複,給每一個元素設置一個分數(score)做爲排序的依據redis

延時隊列能夠經過 Redis 的 zset(有序列表) 來實現。咱們將消息序列化成一個字符串做爲 zset 的value,這個消息的到期處理時間做爲score,而後用多個線程輪詢 zset 獲取到期的任務進行處理,多個線程是爲了保障可用性,萬一掛了一個線程還有其它線程能夠繼續處理。由於有多個線程,因此須要考慮併發爭搶任務,確保任務不能被屢次執行。併發

zadd key score member 添加編碼

redis 3.2爲zadd 添加了nx,xx,ch,incr:spa

nx:member必須不存在,才能設置成功,用於添加線程

xx: member必須不存在,才能設置成功,用於更新code

ch:返回這次操做後,有序集合元素和分數發生變化的個數排序

incr: 對score作增長,至關於後面介紹的zincrby隊列

常規操做:ip

zcard key : 計算成員的個數內存

zrank key member : 計算成員的排名(順序)

zrevrank key member:計算成員的排名(倒序)

zrange(zrevrang) key start end :返回指定排名範圍的成員

zrangebyscore(zrevrangebyscore) key min max:返回分數範圍的成員(-inf 無限小 +inf 無限大)

zcount key min max :返回指定分數範圍成員個數

zremrangebyscore key min max : 刪除指定分數範圍的成員

集合操做:

zinterstore destination numkeys key :交集 weight 每一個鍵的權重,在作交集計算上,每一個元素相乘這個權重,默認爲1

zunionstore destination numkeys key :並集

內部編碼:

ziplist(壓縮列表):元素個數小於zset-max-ziplist-entries配置(默認128個),同時每一個元素值小於zset-max-ziplist-value配置(默認64字節),ziplist 能夠有效減小內存的使用

skiplist(跳躍表):當ziplist條件不知足時。ziplist的讀寫效率會降低

使用場景:排行榜系統,添加用戶贊數(某種操做)

相關文章
相關標籤/搜索