redis刪除有序集合部分過期元素

最近老大讓看看redis中數據類型,list中單個element元素,能不能設置過期(不是針對整個list),整個list是可以直接設置過期的。網上搜結果list單個元素不支持自動過期設置

expire 列表名 時間


需求:就是把超過指定時間的列表元素數據直接刪除


考慮如下折中辦法

①每隔5分鐘,就新建一個列表,使用過期函數把超過5分鐘的list,都刪掉。

②使用有序集合,來實現。(每個有序集合 的成員都關聯着一個評分,這個評分用於把有序集 閤中的成員按最低分到最高分排列。)思路:將score 設置成時間戳,讓後通過zremrangebyscore來刪除

example :

添加元素

ZADD key score member [[score member] [score member] ...]

刪除元素

ZREMRANGEBYSCORE key min max


下面自己用有序集合來測試案例

##添加元素,休眠5秒鐘,然後在添加數據


filename:redisadd.py
#!/usr/bin/python
import redis
import time
r = redis.StrictRedis(host='127.0.0.1', port=6379)
key='myzset'
#r.zadd('myzset',0,"someting without expiration")
for i in range(10):
    value="insert "+str(i)+" value"
    r.zadd(key,time.time(),value)
                                                                                               
time.sleep(5)
for s in "study":
    r.zadd(key,time.time(),s)
print r.zrange('myzset',0,-1,withscores=True)

##主要把3秒之前添加的數據刪除

filename:redisdel.py
#!/usr/bin/python
import redis
import time
r = redis.StrictRedis(host='127.0.0.1', port=6379)
key="myzset"
r.zremrangebyscore('myzset',0,int(time.time())-3)
print r.zrange(key,0,-1,withscores=True)


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