redis sort set的使用

公司最近有個需求,就是對某個事件的證實要分多個態度,高興(1),傷心(2),驚訝(3),憤怒(4)(後面的爲態度值)

用戶還可以反悔,比如不小心選擇了高興,那麼用戶想改成傷心也是可以的。

本來是想着直接在時間戳(13位)的後面加上兩位用作態度,但是老大說當一個事件證實的人很多的時候,一次把所有的sort set

拿出來,當數量到達幾千的個的時候,怕redis承受不住,而且就算是全部拿出來,但是前端也只是只展示前面30個用戶的頭像。

所以中還是要過濾掉的。

於是就將態度放入到前面,約定前面的44位二進制位爲時間的部分。然後在44前面放態度。

所以當一個分數score拿出來後,可以通過 score >> 44 拿到態度值,通過 0XFFFFFFFFFFF & score可以拿到時間戳

需求1:拿全部類型的前面30個

那麼就可以在各個類型中 拿前面30個,然後拿到時間,倒序排,可以拿到最新的前面三十個

需求2:拿高興用戶的前面30個

高興用戶值爲1,則可以知道它的分數返回在 1 << 44  到 2 << 44之間

然後通過上一篇文章的拿某個分數範圍內前面n個記錄的方法,拿到前面三十個記錄

注意:redis的sort set的分數有效位爲16位,時間戳13位,而2^44  = 17592186044416一共15位

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章