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