Redis sortedset實現元素自動過期


 

這里的自動過期,Redis並沒有提供相應的api,但是可以使用一下方法來實現。

需求背景

給用戶返回的文章要求七日內不能重復;文章是存放在java list里邊;(這一塊就是從db將文章拿出來,然后放入list,放入java內存中)。

分析

一開始我的做法是這樣:

當用戶第一次訪問的時候,創建一個key值為userId的緩存,value為title列表(文章標題,文章唯一標識),然后給這個key值設置過期時間。 
但是這樣,到過期時,整個列表都會被清掉。原則上,只應該清除掉到達過期時間的元素,未過期的元素則應該保持。這種方法不能實現預期效果。

可實現方案:

使用redis有序集合==sorted Set== 以及對應的==ZREMRANGEBYLEX key min max==命令
移除有序集合中給定的字典區間的所有成員;

redis提供了響應的數據結構和api可以實現:

ZADD key score1 member1 [score2 member2] 向有序集合添加一個或多個成員,或者更新已存在成員的分數 通過使用 ZREMRANGEBYSCORE key min max 命令刪除有序集合保存在key的最小值和最大值(含)之間的分數的所有元素。 通過定時去調用此命令,即可實現list元素自動過期;

對應相應的實現方案: 
使用redis來存儲給每個用戶下發的文章,對應的key值為userId(用戶唯一標識),value為title列表加上相關聯的score。

 
zadd userId score title 這里的score為當前時間的時間戳; ZREMRANGEBYSCORE key 0 score 這里的score設為當前時間前7天對應的時間的時間戳;(具體時間戳可以用java Calander類計算得到) 這里可以啟動一個定時任務去定時調用這個命令即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM