這裏的自動過時,Redis並無提供相應的api,可是能夠使用一下方法來實現。html
需求背景:java
給用戶返回的文章要求七日內不能重複;文章是存放在java list裏邊;(這一塊就是從db將文章拿出來,而後放入list,放入java內存中)。redis
分析:api
當用戶第一次訪問的時候,建立一個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。code
zadd userId score title 這裏的score爲當前時間的時間戳; ZREMRANGEBYSCORE key 0 score 這裏的score設爲當前時間前7天對應的時間的時間戳;(具體時間戳能夠用java Calander類計算獲得) 這裏能夠啓動一個定時任務去定時調用這個命令便可
想要了解更多Redis 有序集合的資料。可參考如下資料:
Redis Zremrangebyscore 命令詳解
Redis 有序集合(sorted set)htm