Redis--过期键的删除策略,淘汰策略

Redis采用惰性过期和定期过期策略处理过期键,同时结合内存淘汰策略管理内存。惰性过期在访问key时检查是否过期并删除,定期过期则是定期扫描并删除过期key。内存淘汰策略包括noeviction、allkeys-lru等,处理内存不足时的数据。Redis通过expires字典存储过期时间,当内存不足时,会根据设定的策略移除部分key。
摘要由CSDN通过智能技术生成

过期键的删除策略

众所周知Redis是一个key-value数据库,还经常被当作缓存,当数据过期了怎么办?

答:删除呗。。

怎么删除,删除哪些数据??

答:两种删除方式

  • 惰性过期:只有当访问一个key时,才会判断该key是否过期,过期则清除,该策略可以最大化的节省CPU资源,却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。

  • 定时删除
    在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作。对内存是最友好的,保证过期键会尽可能快地被删除,并释放过期键所占用的内存。对cpu时间是最不友好的,过期键比较多的情况下,删除键会占用相当一部分的cpu时间,无疑会对服务器的响应时间和吞吐量造成影响。

  • 定期过期:每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已经过期的key。是前两种方案的一种折中

:Redis中同时使用了惰性过期和定期过期两种过期策略。

expires字典是什么?
expires字典会保存所有设置了过期时间的key的过期时间数据,其中,key是指向键空间中的某个键的指针,value是该键的毫秒精度的UNIX时间戳表示的过期时间。键空间是指该Redis集群中保存的所有键

淘汰策略

是什么?

Redis的内存淘汰策略是指在Redis的用于缓存的内存不足时,怎么处理需要新写入且需要申请额外空间的数据。

全局的键空间选择性移除

noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。
allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key。(这个是最常用的)
allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key。

设置过期时间的键空间选择性移除

volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key。
volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key。
volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。

总结

Redis的内存淘汰策略的选取并不会影响过期的key的处理。内存淘汰策略用于处理内存不足时的需要申请额外空间的数据;过期策略用于处理过期的缓存数据。

### 回答1: Redis过期删除策略和回收策略通常包括以下几种: 1. 定期删除策略Redis默认使用该策略。即通过定期遍历数据库中的值对,删除过期值对。缺点是不能保证过期立即被删除。 2. 惰性删除策略:即在访问某个时,先检查该是否过期,如果过期删除。该策略可以保证过期立即被删除,但会降低Redis的性能。 3. 压缩策略:当Redis的内存使用达到一定阈值时,Redis会自动触发压缩策略,即尝试删除一些过期值对,以释放内存空间。该策略的缺点是可能会耗费较长的时间,影响Redis的性能。 4. 哨兵策略:该策略适用于主从架构的Redis集群中。当主节点上的过期时,主节点会通知从节点删除过期,保证从节点和主节点的数据一致性。 对于回收策略淘汰策略),Redis也提供了多种选择: 1. LRU算法:Least Recently Used,即淘汰最近最少使用的值对。 2. LFU算法:Least Frequently Used,即淘汰最不经常使用的值对。 3. 随机算法:随机淘汰某个值对。 4. TTL算法:Time To Live,即淘汰存活时间最短的值对。 5. 淘汰策略定制:可以根据实际应用场景自定义淘汰策略。 ### 回答2: Redis在处理过期删除策略方面采用了惰性删除和定期删除相结合的方式。 惰性删除是指当读取一个过期时,Redis会先检查是否过期,如果过期则将其删除,然后返回空值。这种方式的优点是可以保证读取时的性能较高,因为不会额外执行删除操作。然而,由于惰性删除是基于客户端请求的,如果长时间没有读取某个过期,那么该将一直存在于内存中。 为了解决惰性删除可能导致过期无法及时删除的问题,Redis还采取了定期删除策略。定期删除是指Redis每隔一定时间会对部分过期进行扫描和删除。具体删除的数量取决于配置参数,默认为每秒钟检查10个随机过期。定期删除策略可以保证即使某个时间没有被访问,也可以有机会被删除,从而释放内存空间。 回收策略淘汰策略)用于在内存不足时,决定哪些应该被优先删除Redis提供了多种回收策略供用户选择,常用的有:noeviction、allkeys-lru、allkeys-random等。其中,noeviction表示当内存不足时,不执行任何删除操作,而是直接返回写入错误;allkeys-lru表示使用LRU(Least Recently Used)算法删除最近最少使用的;allkeys-random表示随机删除一个。用户可以根据自身的需求选择合适的回收策略来优化系统性能。 总结起来,Redis过期删除策略采取了惰性删除和定期删除相结合的方式,通过惰性删除提高读取性能,通过定期删除保证未被访问的过期能够最终被删除。而回收策略用于在内存不足时进行主动删除操作,以释放内存空间。根据需要,可以选择不同的回收策略来满足不同的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值