Redis给缓存数据设置过期时间有什么用?Redis过期数据的删除策略是什么?

(1)Redis给缓存数据设置过期时间有什么用?Redis key的过期时间和永久有效时间怎么设置?

内存资源管理:缓存数据如果没有过期时间,可能会导致数据无限期地占用内存资源,随着数据不断积累,Redis服务器的内存空间可能逐渐耗尽,设置过期时间可以自动清理不再需要的数据,从而有效管理内存资源,避免内存泄漏和溢出。

数据新鲜度:对于时效性强的数据(如实时价格、新闻资讯等),设置过期时间可以确保缓存中的数据保持最新状态。当数据过期后,Redis会自动删除过期数据,应用程序可以再次从原始数据源获取最新数据并重新缓存。

业务需求:很多业务场景需要缓存数据在一定时间后失效,比如限时促销活动结束后,相关商品的缓存信息应自动失效;或者用户登录状态有效期过后,对应的session缓存也应该被清理。

过期时间和永久有效时间设置

通过expire或pexpire命令,客户端可以以秒或毫秒的精度为数据库中的某个键设置生存时间。客户端也可以通过expireat和pexpireat命令,以秒或毫秒精度给数据库中的某个键设置过期时间(让某个键在某个时间点过期)。若要设置为永久有效,则要么一开始就不设置过期时间,要么使用persist命令移除已有的过期时间。

(2)Redis过期数据的删除策略是什么?

Redis的过期删除策略就是,惰性删除和定期删除两种策略配合使用。

惰性删除:惰性删除不会去主动删除数据,而是在访问数据的时候,再检查当前键值是否过期,如果过期则执行删除并返回 null 给客户端,如果没有过期则返回正常信息给客户端。它的优点是简单,不需要对过期的数据做额外的处理,只有在每次访问的时候才会检查键值是否过期,缺点是删除过期键不及时,造成了一定的空间浪费。

定期删除:Redis会周期性的随机测试一批设置了过期时间的key并进行处理。测试到的已过期的key将被删除。

删除key常见的三种处理方式

1、定时删除:在设置某个key 的过期时间的同时,创建一个定时器,让定时器在该过期时间到来时,立即执行对其进行删除的操作。

优点:定时删除对内存是最友好的,能够保存内存的key一旦过期就能立即从内存中删除。

缺点:对CPU最不友好,在过期键比较多的时候,删除过期键会占用一部分 CPU 时间,对服务器的响应时间和吞吐量造成影响。

2、惰性删除:设置该key 过期时间后,我们不去管它,当需要该key时,我们在检查其是否过期,如果过期,我们就删掉它,反之返回该key。

优点:对 CPU友好,我们只会在使用该键时才会进行过期检查,对于很多用不到的key不用浪费时间进行过期检查。

缺点:对内存不友好,如果一个键已经过期,但是一直没有使用,那么该键就会一直存在内存中,如果数据库中有很多这种使用不到的过期键,这些键便永远不会被删除,内存永远不会释放。从而造成内存泄漏或者OOM。

3、定期删除:每隔一段时间,我们就对一些key进行检查,删除里面过期的key。

优点:可以通过限制删除操作执行的时长和频率来减少删除操作对 CPU 的影响。另外定期删除,也能有效释放过期键占用的内存。

缺点:难以确定删除操作执行的时长和频率。如果执行的太频繁,定期删除策略变得和定时删除策略一样,对CPU不友好。如果执行的太少,那又和惰性删除一样了,过期键占用的内存不会及时得到释放。另外最重要的是,在获取某个键时,如果某个键的过期时间已经到了,但是还没执行定期删除,那么就会返回这个键的值,这是业务不能忍受的错误。

  • 23
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值