网站开发命名规范,四库一平台怎么查建造师业绩,建设银行官网站下载地址,wordpress 钩子开发前言
本文主要说明在Redis面临key过期和内存不足的情况时#xff0c;可以采用什么策略进行解决问题。
Redis中是如何应对过期数据的
正如我们知道的Redis是基于内存的、单线程的一个中间件#xff0c;在面对过期数据的时候#xff0c;Redis并不会去直接把它从内存中进行剔…前言
本文主要说明在Redis面临key过期和内存不足的情况时可以采用什么策略进行解决问题。
Redis中是如何应对过期数据的
正如我们知道的Redis是基于内存的、单线程的一个中间件在面对过期数据的时候Redis并不会去直接把它从内存中进行剔除因为Redis是单线程的如果出现了过期key就立马去删除可能会影响到主要的业务的执行
在Redis中提供了以下两种删除过期键值的策略
惰性删除
工作原理 惰性删除就出现过期了也不去管他等某个请求访问到这条数据的时候判断是否过期过期就删除并返回null 优点 每次访问过期数据才会进行删除操作占用相对较少的系统资源 缺点 过期数据占用的空间清理不及时导致空间利用率低浪费内存空间
定期删除
工作原理 每隔一段时间检测数据库随机删除一些过期数据 优点 通过限制删除操作的时长和频率来减少删除操作对主业务的影响同时也能减轻内存空间的压力 缺点 没有惰性删除的系统资源占用少本身还是存在一定的空间浪费
定期删除工作流程
举个简单的例子
定期中从设置过期时间的key字典中随机取出一定数量的key删除一定数量中过期key如果这个过期key占25%重复1步骤
为了防止出现循环过度造成线程卡死redis中设置了默认扫描时间25ms流程图如下
Redis的内存淘汰策略
当Redis中的内存使用超过最大使用内存数后会使用内存淘汰策略删除 来保证redis的正常运行
noeviction不淘汰 当内存不足以容纳新写入数据时新写入操作会报错。allkeys-lru最近最少使用 从键空间中选择最近最少使用的键淘汰。allkeys-lfu最不经常使用 从键空间中选择最不经常使用的键淘汰。allkeys-random随机淘汰 从键空间中随机选择键淘汰。volatile-lru最近最少使用 从设置了过期时间的键中选择最近最少使用的键淘汰。volatile-lfu最不经常使用 从设置了过期时间的键中选择最不经常使用的键淘汰。volatile-random随机淘汰 从设置了过期时间的键中随机选择键淘汰。volatile-ttl最短过期时间 从设置了过期时间的键中选择离过期时间最近的键淘汰。
这些淘汰策略可以通过在 Redis 配置文件或在运行时通过相关命令进行配置。根据具体业务需求和数据访问模式选取合适的淘汰策略可以提高 Redis 的性能和内存利用率。
实际是三大类noeviction、allkey-xxx、volatile-xxx
LRU 与 LFU
LRU (Last Recently Used)
LRU 策略按照最近最少使用的原则淘汰数据。当缓存空间不足时会优先淘汰最长时间未被访问的数据。LRU 策略维护一个访问时间顺序的队列每次访问数据时将数据移动到队列的末尾。当需要淘汰数据时从队列的头部淘汰最久未被访问的数据。
LFU (Last Frequently Used)
LFU 策略按照最不经常使用的原则淘汰数据。LFU 策略维护每个数据被访问的频率信息当缓存空间不足时会优先淘汰访问频率最低的数据。LFU 策略需要为每个数据维护一个访问频率计数器每次访问数据时将对应的计数器值加一。当需要淘汰数据时选择访问频率最低的数据进行淘汰。
主要区别
LRU 按照最近最少使用进行淘汰LFU按照最不经常使用进行淘汰。LRU维护一个顺序表LFU维护一个计数器LRU关注访问顺序LFU关注访问频率LRU假设最近被访问的可能会被再次访问LFU假设访问次数最少的键是最不常用的
以上是本文全部内容 感谢阅读