济南做网站知识,客厅装修风格,wordpress媒体库上传,公司网站更新Redis内存淘汰机制
引言
Redis 启动会加载一个配置#xff1a; maxmemory byte //内存上限 默认值为 0 (window版的限制为100M)#xff0c;表示默认设置Redis内存上限。但是真实开发还是需要提前评估key的体量#xff0c;提前设置好内容上限。
此时思考一个问题…Redis内存淘汰机制
引言
Redis 启动会加载一个配置 maxmemory byte //内存上限 默认值为 0 (window版的限制为100M)表示默认设置Redis内存上限。但是真实开发还是需要提前评估key的体量提前设置好内容上限。
此时思考一个问题开发中在设置完内存上限之后如果Redis key达到上限了该怎么办这就设置到Redis的内存淘汰机制了。
内存淘汰算法
Redis内存淘汰机制也可以称之为key内卷机制当资源不足时该如何选择
常见的内存淘汰机制分为四大类 LRULRU是Least recently used最近最少使用的意思简单的理解就是从数据库中删除最近最少访问的数据该算法认为你长期不用的数据那么被再次访问的概率也就很小了淘汰的数据为最长时间没有被使用仅与时间相关。 LFULFU是Least Frequently Used最不经常使用的意思简单的理解就是淘汰一段时间内使用次数最少的数据这个与频次和时间相关。 TTLRedis中有的数据是设置了过期时间的而设置了过期时间的这部分数据就是该算法要解决的对象。如果你快过期了不好意思我内存现在不够了反正你也要退休了提前送你一程把你干掉吧。 随机淘汰生死有命富贵在天是否被干掉全凭天意了。 Redis淘汰策略
Redis 通过配置 maxmemroy-policy 来配置指定具体的淘汰机制可供选择的值有 通过maxmemroy-policy可以配置具体的淘汰机制看了网上很多文章说只有6种其实有8种可以看Redis5.0的配置文件上面有说明 volatile-lru - 找出已经设置过期时间的数据集将最近最少使用被访问到的数据干掉。 volatile-ttl - 找出已经设置过期时间的数据集将即将过期的数据干掉。 volatile-random - 找出已经设置过期时间的数据集进行无差别攻击随机干掉数据。 volatile-lfu - 找出已经设置过期时间的数据集将一段时间内使用次数最少的数据干掉。 allkeys-lru -与第1个差不多数据集从设置过期时间数据变为全体数据。 allkeys-lfu - 与第4个差不多数据集从设置过期时间数据变为全体数据。 allkeys-random - 与第3个差不多数据集从设置过期时间数据变为全体数据。 no-enviction - 什么都不干报错告诉你内存不足这样的好处是可以保证数据不丢失
系统默认选择 noenviction 过期Key处理[拓展]
接下讨论一个问题Redis的key过期了该如何清理问题。
Redis给出3种实现方案
惰性删除当访问Key时才去判断它是否过期如果过期直接干掉。这种方式对CPU很友好但是一个key如果长期不用一直存在内存里会造成内存浪费。
定时删除设置键的过期时间的同时创建一个定时器当到达过期时间点立即执行对Key的删除操作这种方式对CPU不友好得额外让出CPU维护定时器。
定期删除隔一段时间对数据进行一次检查删除里面的过期Key至于要删除多少过期Key检查多少数据则由算法决定。
Redis服务器实际使用的是惰性删除和定期删除两种策略通过配合使用这两种删除策略可以很好地在合理使用CPU和避免浪费内存之间取得平衡。