`
jiorry
  • 浏览: 276505 次
  • 性别: Icon_minigender_1
  • 来自: 兰州
社区版块
存档分类
最新评论

redis 下key的过期时间详解 :expire

阅读更多

memcached 和 redis 的set命令都有expire参数,可以设置key的过期时间。但是redis是一个可以对数据持久化的key-value database,它的key过期策略还是和memcached有所不同的。梳理,整理如下:

 

redis通过expire命令来设置key的过期时间。

语法:redis.expire(key, expiration)

 

1. 在小于2.1.3的redis版本里,只能对key设置一次expire。redis2.1.3和之后的版本里,可以多次对key使用expire命令,更新key的expire time。


2. redis术语里面,把设置了expire time的key 叫做:volatile keys。 意思就是不稳定的key。

 

3. 如果对key使用set或del命令,那么也会移除expire time。尤其是set命令,这个在编写程序的时候需要注意一下。


4. redis2.1.3之前的老版本里,如果对volatile keys 做相关写入操作(LPUSH,LSET),和其他一些触发修改value的操作时,redis会删除 该key。 也就是说 :

redis.expire(key,expiration);

redis.lpush(key,field,value);

redis.get(key) //return null

redis2.1.3之后的版本里面没有这个约束,可以任意修改。

 

redis.set(key,100);

redis.expire(key,expiration);

redis.incr(key)

redis.get(key)

//redis2.2.2 return 101; redis<2.1.3 return 1;


5. redis对过期键采用了lazy expiration:在访问key的时候判定key是否过期,如果过期,则进行过期处理。其次,每秒对volatile keys 进行抽样测试,如果有过期键,那么对所有过期key进行处理。

 

end------------------

11
6
分享到:
评论
6 楼 文昌平蓝杰 2014-12-17  
tywo45 写道
请教一下:expire设置的超时是从key创建时开始计时的。如果想像session超时那样,从上一次访问开始计时,redis是否支持?


不知道你老人家解决了没有,但是这个功能可以用,如果没过期,重新set一下来解决的啊,redis有控制原子操作的 函数,你试试去
5 楼 lovme_forever 2014-04-28  
说的不是很详细,设置expire 只对 redis的大key有效吧 ,,他这个是有不同的存储对象的,,string ,list,set ,hash大概这几种,这些对象 里面又可以存放对象,比如hash,想对hash中某一行存储设置expire就不行了吧
4 楼 tywo45 2014-04-07  
请教一下:expire设置的超时是从key创建时开始计时的。如果想像session超时那样,从上一次访问开始计时,redis是否支持?
3 楼 风云无浪 2013-01-22  
写的可以啊,为啥这么多人踩呢。。。
除了set和del还有啥会使expire失效呢?另外如果对大量到key设置expire3600000,会影响性能不?
2 楼 helloqidi 2012-09-25  
谢谢分享!
1 楼 月夜兔 2011-11-14  
,正是我需要的,谢谢!!!

相关推荐

Global site tag (gtag.js) - Google Analytics