一 redis内存过期讨论策略
1.1 查看与设置redis默认的内存大小
1.查看redis默认内存大小
config get maxmemory
config set maxmemory 1024
注意:在64-bit系统下,maxmemory设置为0表示不限制redis的内存使用。
1.2 操作案例说明
127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "0"
127.0.0.1:6379> config set maxmemory 1
OK
127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "1"
127.0.0.1:6379> set k1 liujianfu
(error) OOM command not allowed when used memory > 'maxmemory'.
127.0.0.1:6379> config set maxmemory 0
OK
127.0.0.1:6379> config get maxmemory 1
1) "maxmemory"
2) "0"
127.0.0.1:6379> set k1 liujianfu
OK
127.0.0.1:6379> keys *
1) "k1"
127.0.0.1:6379>
1.2 lru与lfu 页面淘汰算法
LRU: 最近最少使用页面置换算法,查看页面最后一次被使用到发生调度的时间长度,首先淘汰最长时间未被使用的页面。
LFU:最近最不经常使用页面置换算法,淘汰规定时间段范围内,使用次数最少的页面。
举个例子:某次时间time为10分钟,如果每分钟进行一次调度,主存块为3,页面走向为2121234
假设页面4时会发生页面中断。
如果按LRU算法,应该置换页面1(3个一组,234,没有1,则1最少使用);使用LFU算法应该置换页面3(10分钟3出现次数最少)
总结:LRU主要看页面最后一次被使用到发生调度的时间长短;而LFU在一定时间内页面被使用的频率。
1.3 redis过期key删除策略
1.3.1 立即删除
立即删除能保证内存中数据的最大新鲜度,因为它保证过期键值会在过期后马上被删除,其所占用的内存也会随之释放。但是立即删除对cpu是最不友好的。因为删除操作会占用cpu的时间,如果刚好碰上了cpu很忙的时候,比如正在做交集或排序等计算的时候,就会给cpu造成额外的压力,让CPU心累,时时需要删除,忙死。。。。。。。这会产生大量的性能消耗,同时也会影响数据的读取操作。
1.3.2 惰性删除
数据到达过期时间,不做处理。等下次访问该数据时,如果未过期,返回数据 ;发现已过期,删除,返回不存在。
惰性删除策略的缺点是,它对内存是最不友好的。
1.3.3 定时删除
Redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。
Redis 提供 8种数据淘汰策略
1.noevication 不设置策略,达到峰值直接报error。默认的配置。
2.allkeys-lru:对所有key使用LRU算法进行删除,优先删除掉最近不经常使用的key,用以保存最新数据。
3.allkeys-random:对所有key随机删除
4.allkeys-lfu:对所有key使用lfu算法进行删除。
5.volatile-lru:对所有设了过期时间的key使用lru进行删除。
6.volatile-random: 对设置过期时间的key随机进行删除
7.volatile-ttl:删除马上要过期的key文章来源:https://www.toymoban.com/news/detail-470077.html
8.volatile-lfu:对所有设置了过期时间的key使用lfu算法进行删除。文章来源地址https://www.toymoban.com/news/detail-470077.html
到了这里,关于redis 7.x 内存过期淘汰策略的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!