`
leixbo
  • 浏览: 32599 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Redis key过期时间浅谈

阅读更多

Redis通过expire命令来设置key的过期时间,在redis术语里面,把设置了expire time的key 叫做:volatile keys,意思就是不稳定的key。

 

 

过期设置 

 

     语法:EXPIRE key seconds (该命令为参数中指定的Key设定超时的秒数,在超过该时间后,Key被自动的删除。如果该Key在超时之前被修改,与该键关联的超时将被移除。) 

 

或者

 

     语法:EXPIREAT key timestamp    (该命令的逻辑功能和EXPIRE完全相同,唯一的差别是该命令指定的超时时间是绝对时间,而不是相对时间。该时间参数是Unix timestamp格式的,即从1970年1月1日开始所流经的秒数。)

 

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

 

 

过期时间清除

 

Key过期时间清除的情况:

    1、PERSIST key    如果Key存在过期时间,该命令会将其过期时间消除,使该Key不再有超时,而是可以持久化存储。

    2、SET key newValue 此时会清除过期时间,这个需要特别注意

    3、DEL key        这个很显然会清除过期时间

  

一些触发修改value的操作(除了SET),如lpush,lset,incr等,将不会清除过期时间(redis2.1.3之前的版本是会清除的)。

另外 RENAME 也不会清除过期时间

 

 

过期处理 

 

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

 

删除策略一般由以下几种

 

    定时删除:在设置键的过期时间时,创建一个定时事件,当过期时间到达时,由事件处理器自动执行键的删除操作。

    惰性删除:放任键过期不管,但是在每次从 dict 字典中取出键值时,要检查键是否过期,如果过期的话,就删除它,并返回空;如果没过期,就返回键值。

    定期删除:每隔一段时间,对 expires 字典进行检查,删除里面的过期键。

 

而Redis是采用的惰性删除+定期删除来处理过期数据

 

分享到:
评论

相关推荐

    Redis集群下过期key监听的实现代码

    在使用redis集群时,发现过期key始终监听不到。网上也没有现成的解决方案。于是想,既然不能监听集群,那我可以建立多个redis连接,分别对每个redis的key过期进行监听。以上做法可能不尽人意,目前也没找到好的解决...

    Redis获取某个前缀的key脚本实例

    主要给大家介绍了关于Redis获取某个前缀的key脚本的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Redis具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

    监听redis过期key,做对应业务处理

    1.springboot集成redis,并监听redis过期key做相应的业务处理

    redis命令集合,redis命令详解

    EXPIRE设置某个key的过期时间(秒),(EXPIRE bruce 1000:设置bruce这个key1000秒后系统自动删除)注意:如果在还没有过期的时候,对值进行了改变,那么那个值会被清除。 TTL查找某个key还有多长时间过期,返回时间秒 ...

    Redis清理过期key的方法.doc

    在Redis中,对于过期key的清理主要有惰性清除,定时清理,内存不够时清理三种方法,下面我们就来具体看看这三种清理方法。

    Redis基础.md

    # Redis基础 ## 数据类型 ### strings * `set key value`和`get key`,注意set操作会覆盖已有的key/value,若不希望覆盖可使用`set key value nx` * `mset key1 value1 key2 value2 ...`和`mget key1 key2 ...`...

    Redis_Key操作命令

    Redis_Key操作命令,Redis主要用于数据队列存储

    通过Key前缀分析Redis的内存占用按内存大小排序导出结果到csv文件

    通过Key前缀分析Redis的内存占用按内存大小排序导出结果到csv文件

    Python获取Redis所有Key以及内容的方法

    一、获取所有Key # -*- encoding: UTF-8 -*- __author__ = "Sky" import redis pool=redis.ConnectionPool(host='127.0.0.1',port=6379,db=0) r = redis.StrictRedis(connection_pool=pool) keys = r.keys() print ...

    java操作Redis缓存设置过期时间的方法

    主要介绍了java操作Redis缓存设置过期时间的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Redis热点key及大key解决方案.docx

    Redis热点key及大key解决方案.docx

    spring-redis-session 自定义 key 和过期时间

    主要介绍了spring-redis-session 自定义 key 和过期时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    redis过期监听.docx

    php+redis 键值过期自动监听 可以用作定时任务 当redis键值过期的时候就会触发回调方法,然后执行自己的程序,比如30分钟订单自动取消

    Redis内存过期策略

    Redis内存过期策略,Redis的内存回收机制,相关配置项

    redis深入浅出

    这是介绍关于redis的资料,适合了解的人,但是不是特别适合深入学习的人

    SpringBoot监听reids的key值过期

    实现redis的key值过期监听事件,且集成jedis实现redis的简单调用,内有功能备注

    redis批量删除以指定内容开头的key

    用java写了个redis批量删除以指定内容开头的key,使用时只需要修改config.json中的配置(host,port,database,delKey:指定的key值开头),然后java -jar demo.jar运行即可

    redis分布式锁带过期时间和方法名代码.zip

    redis分布式锁带方法名和过期时间,如果不传方法名自动获取改方法名做key,使锁的粒度到方法级别,释放锁的时间可以根据自己的需要自定义,默认5s,为了解决超大方法执行时间太长,还没有执行完,锁就被释放掉的问题.

    redis 操作命令

    删除单个列表、集合、有序集合或哈希表类型的 key ,时间复杂度为 O(M),M 为以上数据结构内的 元素数量。 返回值: 被删除 key 的数量。 # 删除单个 key redis> SET name huangz OK redis> DEL name (integer) 1 # ...

    Redis and other Key-Value Stores.pdf

    Redis and other Key-Value Stores Consistency: Consistency guaranteed only on a single key. Distributed stores are eventually consistent. Resolution of update conflicts varies.

Global site tag (gtag.js) - Google Analytics