最近老大讓看看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)