Redis-数据过期策略

在这里插入图片描述


更多相关内容可查看

Redis数据过期策略的作用是什么?

Redis数据过期策略是指在Redis中设置数据的过期时间,并在数据过期时自动从数据库中删除该数据的一种机制。这种机制的作用主要体现在以下几个方面:

  • 缓存管理:Redis经常被用作缓存系统,用于存储频繁访问但不常变化的数据,如页面缓存、会话数据等。通过设置数据过期时间,可以自动清理过期的缓存数据,避免缓存数据占用过多内存空间,保持系统的性能稳定。
  • 节省内存空间:Redis是一个内存数据库,内存资源有限。通过设置数据的过期时间,可以自动释放过期的数据占用的内存空间,保证内存资源的有效利用。
  • 防止数据过期:在一些场景中,数据可能会因为不再被访问而过期,但在过期前又被重新访问到。为了避免这种情况,Redis提供了惰性删除和定期删除两种过期策略。惰性删除会在获取数据时检查数据是否过期,定期删除则是通过定时任务扫描数据库,删除过期数据。这样可以保证数据在被访问时不会过期。
  • 控制数据生命周期:通过设置数据的过期时间,可以控制数据的生命周期,使数据在一定时间内有效,从而管理数据的时效性和有效性。
  • 降低系统复杂度:使用数据过期策略可以简化系统逻辑,避免手动管理数据的过期与清理,减少开发和维护成本。

Redis的数据过期策略有哪些?

定时删除

在设置key的过期时间的同时,创建一个定时器,让定时器在过期时间到来时立即执行删除操作。但Redis并没有使用这种方式,因为它需要消耗大量的CPU资源去处理定时器,而且在实际应用中,很难确保定时器能够准确地在过期时间删除key。

惰性删除

惰性删除 :只会在取出 key 的时候才对数据进行过期检查。这样对 CPU 最友好,但是可能会造成太多过期 key 没有被删除。
数据到达过期时间,不做处理。等下次访问该数据时,我们需要判断

  • 如果未过期,返回数据
  • 发现已过期,删除,返回nil

定期删除

  • 定期删除 : 每隔一段时间抽取一批 key 执行删除过期 key 操作。并且,Redis底层会通过限制删除操作执行的时长和频率来减少删除操作对 CPU 时间的影响。 默认情况下 Redis
    定期检查的频率是每秒扫描 10次,用于定期清除过期键。当然此值还可以通过配置文件进行设置,在 redis.conf 中修改配置“hz”即可,默认的值为hz 10

  • 定期删除的扫描并不是遍历所有的键值对,这样的话比较费时且太消耗系统资源。Redis 服务器采用的是随机抽取形式,每次从过期字典中,取出 20个键进行过期检测,过期字典中存储的是所有设置了过期时间的键值对。如果这批随机检查的数据中有 25% 的比例过期,那么会再抽取
    20个随机键值进行检测和删除,并且会循环执行这个流程,直到抽取的这批数据中过期键值小于 25%,此次检测才算完成 Redis

  • 服务器为了保证过期删除策略不会导致线程卡死,会给过期扫描增加了最大执行时间为 25ms

注:定期删除对内存更加友好,惰性删除对 CPU 更加友好。两者各有千秋,所以 Redis 采用的是 定期删除+惰性删除,同时使用PERSIST命令可以将某个key设置为永不过期,或者使用DEL命令手动删除过期的key。

Redis的数据过期策略具体实现?

使用EXPIRE命令:

EXPIRE key seconds:将key的生存时间设置为ttl秒。例如,如果你想让一个key在60秒后过期,你可以使用EXPIRE mykey 60。

使用PEXPIRE命令(毫秒级):

PEXPIRE key milliseconds:将key的生存时间设置为ttl毫秒。

使用EXPIREAT命令(指定过期时间戳):

EXPIREAT key timestamp:将key的过期时间设置为timestamp所代表的秒数的时间戳。这里的timestamp是UNIX时间戳。

使用PEXPIREAT命令(毫秒级指定过期时间戳):

PEXPIREAT key milliseconds-timestamp:将key的过期时间设置为timestamp所代表的毫秒数的时间戳。

本篇小结

Redis数据持久化策略
Redis数据过期策略
Redis数据淘汰策略
Redis集群方案
Redis主从同步
Redis分片集群如何存储及读取数据
Redis跟Mysql如何保证数据一致性
Redis的缓存穿透、缓存击穿、缓存雪崩及解决方案
Redis分布式锁实现方式

  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值