最近老大让看看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)
本文出自 “记录点滴” 博客,请务必保留此出处http://caozm.blog.51cto.com/1118764/1389168
redis删除有序集合部分过期元素,布布扣,bubuko.com
原文:http://caozm.blog.51cto.com/1118764/1389168