`
leixbo
  • 浏览: 34479 次
  • 性别: 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的maxmemory设置以及淘汰策略

    redis的maxmemory参数用于控制redis可使用的最大内存容量。如果超过maxmemory的值...· volatile-lru:在设置了过期时间的键空间中,优先移除最近未使用的key。 · allkeys-random:在主键空间中,随机移除某个key。

    浅谈SpringCache与redis集成实现缓存解决方案

    "浅谈SpringCache与redis集成实现缓存解决方案" SpringCache是Spring Framework中的一种缓存机制,可以与Redis集成实现缓存解决方案。Redis是一种key-value型数据库,具有高性能、低延迟的特点,广泛应用于缓存...

    浅谈python处理json和redis hash的坑

    文章标题是“浅谈Python处理JSON和Redis Hash的坑”,而描述中提到,这篇文章将介绍在使用Python处理JSON和Redis hash时遇到的坑,并希望这些内容能为读者提供参考价值。同时,文章涉及的主要技术标签为Python、JSON...

    浅谈Spring Boot中Redis缓存还能这么用

    默认情况下,Spring Cache不会自动清除缓存,但可以通过`expireAfterWrite`或`expireAfterAccess`属性来设置缓存过期时间。此外,`RedisCacheManager`还支持基于Redis的TTL(Time To Live)机制来设置缓存的生命周期...

    浅谈分布式锁的几种使用方式(redis、zookeeper、数据库)

    1. Redis分布式锁:Redis提供`SETNX`命令或`SET key value EX seconds NX`命令来原子地设置键并设置过期时间,实现分布式锁。Redis还支持`WATCH`命令用于观察键的变化,实现乐观锁。Redis的性能优秀,适合高并发场景...

    【ASP.NET编程知识】浅谈ASP.NET Core中间件实现分布式 Session.docx

    // 设置 Session 过期时间 options.Cookie.HttpOnly = true; // 防止 JavaScript 访问 options.Cookie.SameSite = SameSiteMode.Lax; // CSRF 防护 }); // 其他服务注册 } ``` 记得替换 `localhost:6379` 为你...

    浅谈C#在网络波动时防重复提交的方法

    浅谈C#在网络波动时防重复提交的方法 在网络波动时防重复提交是非常重要的,否则可能会导致数据不一致和重复提交的问题。在本文中,我们将讨论如何使用C#来防止重复提交,并提供了一些解决方案。 首先,让我们看看...

    浅谈Laravel队列实现原理解决问题记录

    在Laravel中使用Redis队列时,还需要了解Redis队列的配置,比如队列驱动、连接、默认队列名称、过期时间等。这些配置项通常在`config\queue.php`文件中设置,如果队列监听器监听的队列名称未指定,队列监听器就会...

Global site tag (gtag.js) - Google Analytics