Redis的sorted set資料結構實現僅保持一定數量的元素

FeelTouch發表於2019-04-30

實際場景

Redis的sorted set一個非常經典的使用場景做排行榜,排行榜通常僅僅需要前100,50, 20就可以了,如果將所有的資料都儲存在sorted set的key中可能會導致key中的元素非常多,那麼有沒有一種簡單的解決方案呢?其實,對於一些例如觀看量、瀏覽量累積型數量非常大的場景,其對於資料的精確度要求相對較低,這是我們可以採用逐步逐出策略

方案描述

每次請求排行榜資料時或者定時,執行如下命令刪除一些長尾中幾乎不可能來到排行榜中的資料元素,以此來保持sorted set始終有可控資料量的元素。具體執行如下:

1. ZCARD key #首先算出總數
2. ZREMRANGEBYRANK key start end #根據總數減去保留的,適當的就可以估算出要刪除的區間start end
3. ZADD key score member #再把新的元素加進去

這三個命令組合使用,高併發引入 setnx incr 等分散式鎖命令前

 

相關文章