最近老大让看看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/pythonimport redisimport timer = 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/pythonimport redisimport timer = 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)