• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

reidis 定期策略

互联网 diligentman 6天前 4次浏览

定期删除

Redis默认每隔 100ms 就 随机抽取 一些设置了过期时间的key,检测这些key是否过期,如果过期了就将其删除。

 

每过100ms 抽 5个 数据检查

conf文件中:

hz=10 //表示1s执行10次定期删除,即每隔100ms执行一次

hz值越大说明刷新频率越快,最Redis性能损耗也越大。

hz的取值范围是1~500,通常不建议超过100,只有在请求延时非常低的情况下可以将值提升到100。

maxmemory-samples=5

//每隔 100ms 就 随机抽取【maxmemory-samples值的个数】设置了过期时间的key检查

 

惰性删除

redis server,惰性删除是内置的策略,不用再配置redis.conf文件

内存淘汰机制(待定)

//配置redis.conf的最大内存,当内存的使用超出了最大内存,就会触发一个内存淘汰机制

maxmemory <bytes>

 

//设置内存主动清除策略:

maxmemory-policy [noeviction]

maxmemory-policy策略

volatilelru->使用近似的LRU逐出,仅设置过期的键

allkeys-lru->使用近似的LRU退出任何密钥。

volatile-lfu->使用近似的LFU驱逐,只有具有过期集的密钥

allkeys-lfu->使用近似的LFU退出任何密钥

volatile-random->删除具有过期设置的随机密钥。

allkeys-random->删除随机密钥,任何密钥。

volatile-ttl->删除最接近到期时间(较小的TTL)的密钥

noeviction->不要逐出任何东西,只需在写操作中返回错误即可。

拓展

LRU算法

当需要从缓存中淘汰数据时,我们希望能淘汰那些将来不可能再被使用的数据,保留那些将来还会频繁访问的数据,但最大的问题是缓存并不能预言未来。一个解决方法就是通过LRU进行预测:最近被频繁访问的数据将来被访问的可能性也越大。缓存中的数据一般会有这样的访问分布:一部分数据拥有绝大部分的访问量。当访问模式很少改变时,可以记录每个数据的最后一次访问时间,拥有最少空闲时间的数据可以被认为将来最有可能被访问到。

 

LFU算法

为每个key维护一个计数器。每次key被访问的时候,计数器增大。计数器越大,可以约等于访问越频繁。

Redis4.0之后为maxmemory-policy淘汰策略添加了两个LFU模式:

volatile-lfu:对有过期时间的key采用LFU淘汰算法

allkeys-lfu:对全部key采用LFU淘汰算法

还有2个配置可以调整LFU算法

lfu-log-factor 10

lfu-decay-time 1

lfu-log-factor可以调整计数器counter的增长速度,lfu-log-factor越大,counter增长的越慢。

lfu-decay-time是一个以分钟为单位的数值,可以调整counter的减少速度

lru和lfu 两算法对比:【转载自:https://blog.csdn.net/u013164931/article/details/82803298】

LRU(Least Recently Used ):淘汰最后被访问时间最久的元素。

缺点:可能会由于一次冷数据的批量查询而误导大量热点的数据。

LFU(Least Frequently Used):淘汰最近访问频率最小的元素。

缺点:1. 最新加入的数据常常会被踢除,因为其起始方法次数少。 2. 如果频率时间度量是1小时,则平均一天每个小时内的访问频率1000的热点数据可能会被2个小时的一段时间内的访问频率是1001的数据剔除掉
 

展开阅读全文

opensslredis

© 著作权归作者所有

举报

打赏

0


0 收藏

微信
QQ
微博

分享

作者的其它热门文章

mysql 建立SSL连接问题,设置useSSL=false显式禁用SSL,或者设置useSSL=true
Java实现PDF转word
Flink问题日常工作记录
使用kafka自带工具类进行重置kafka偏移量


程序员灯塔
转载请注明原文链接:reidis 定期策略
喜欢 (0)