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的值...· volatile-lru:在设置了过期时间的键空间中,优先移除最近未使用的key。 · allkeys-random:在主键空间中,随机移除某个key。
"浅谈SpringCache与redis集成实现缓存解决方案" SpringCache是Spring Framework中的一种缓存机制,可以与Redis集成实现缓存解决方案。Redis是一种key-value型数据库,具有高性能、低延迟的特点,广泛应用于缓存...
文章标题是“浅谈Python处理JSON和Redis Hash的坑”,而描述中提到,这篇文章将介绍在使用Python处理JSON和Redis hash时遇到的坑,并希望这些内容能为读者提供参考价值。同时,文章涉及的主要技术标签为Python、JSON...
默认情况下,Spring Cache不会自动清除缓存,但可以通过`expireAfterWrite`或`expireAfterAccess`属性来设置缓存过期时间。此外,`RedisCacheManager`还支持基于Redis的TTL(Time To Live)机制来设置缓存的生命周期...
1. Redis分布式锁:Redis提供`SETNX`命令或`SET key value EX seconds NX`命令来原子地设置键并设置过期时间,实现分布式锁。Redis还支持`WATCH`命令用于观察键的变化,实现乐观锁。Redis的性能优秀,适合高并发场景...
// 设置 Session 过期时间 options.Cookie.HttpOnly = true; // 防止 JavaScript 访问 options.Cookie.SameSite = SameSiteMode.Lax; // CSRF 防护 }); // 其他服务注册 } ``` 记得替换 `localhost:6379` 为你...
浅谈C#在网络波动时防重复提交的方法 在网络波动时防重复提交是非常重要的,否则可能会导致数据不一致和重复提交的问题。在本文中,我们将讨论如何使用C#来防止重复提交,并提供了一些解决方案。 首先,让我们看看...
在Laravel中使用Redis队列时,还需要了解Redis队列的配置,比如队列驱动、连接、默认队列名称、过期时间等。这些配置项通常在`config\queue.php`文件中设置,如果队列监听器监听的队列名称未指定,队列监听器就会...