网站网站集约化建设,计算机应用是做什么的,网站开发客户需求分析,百度快照 直接进入网站什么是内存回收机制?
众所周知Redis之所以性能高是因为数据都存在内存中#xff0c;内存是很宝贵的#xff0c;Redis的内存回收机制本质就是处理达到过期时间的key-value#xff0c;以及当内存到达最大使用值时候触发的内存淘汰策略。
Redis数据删除的策略有哪些#xf…什么是内存回收机制?
众所周知Redis之所以性能高是因为数据都存在内存中内存是很宝贵的Redis的内存回收机制本质就是处理达到过期时间的key-value以及当内存到达最大使用值时候触发的内存淘汰策略。
Redis数据删除的策略有哪些
定时过期主动淘汰创建一个定时器当key设置有过期时间且达到过期时间的时候由定时器任务立即执行删除操作。
优点节约内存到期就删除快速释放不需要的内存占用。缺点cpu压力很大无论此时cpu负载多高均占用cpu资源会影响redis服务器响应时间和吞吐量。总结用处理器性能换存储空间时间换空间。
惰性删除被动淘汰数据到达过期时间不做处理等下次访问该数据时如果过期就删除不返回数据否则正常返回。
优点节约cpu性能发现必须删除时候才删除。缺点内存压力大无效数据长期占用内存空间存在内存泄漏的风险。总结用内存存储空间换处理器性能。
定时过期主动淘汰创建一个定时器当key设置有过期时间且达到过期时间的时候由定时器任务立即执行删除操作。
优点节约cpu性能发现必须删除时候才删除。缺点不好确定删除操作执行时长和频率执行太频繁CPU压力大执行间隔太久和惰性删除一样存在返回错误数据的风险比如某个key已经到了过期时间但是还没有执行定期删除业务查无的时候会返回该数据该数据是错误数据。总结周期性抽查存储空间通过调整定时扫描的时间间隔和每次扫描的限定耗时尽量达到CPU和内存资源平衡效果一般不推荐使用。
Redis采用的是定时删除和惰性删除的机制实现过期键的内存回收。
Redis对于设置了过期时间的key的逐出算法有哪些
volatile-lru对生存周期内最少有使用key进行置换强调的是距离当前的时间仅关注数据访问时间和顺序忽略访问次数。volatile-lfu对生存周期内最少使用次数key进行置换强调的是时间周期内的使用次数,关注时间区间内数据访问次数。volatile-random对生存周期中的key进行随机置换。volatile-ttl挑选将要过期的数据进行淘汰。
Redis对于全库的key的逐出算法有哪些
allkeys-lru挑选最近最少使用的数据淘汰强调的是距离当前的时间仅关注数据访问时间和顺序忽略访问次数。allkeys-lfu:挑选最近使用次数最少的数据淘汰强调的是时间周期内的使用次数,关注时间区间内数据访问次数。allkeys-random:随机选择数据淘汰。 Redis默认的逐出策略是noeviction当内存使用达到阈值的时候所有申请内存的命令会报OOM。
LRU算法和LFU算法
LRU算法LRULeast Recently Used最近最少使用(最长时间不被使用)淘汰算法LRU算法是淘汰最长时间没有使用key。LFU算法LFULeast Frequently Used最不经常使用(使用次数最少)淘汰算法LFU是淘汰一段时间内使用次数最少的key。
Reidis 碎片及原因
内存分配器的分配策略决定操作系统无法按需分配这是因为内存分配器一般是按固定大小来分配内存而不是完全按照应用程序申请的内存空间大小给程序分配Redis按照固定的大小将空间分配为例如8字节 16字节 32 字节 等等Redis这么做的目的是减少分配次数提高性能比如客户端申请一个20字节的空间Redis会分配一个32字节的空间如果后面在追加10个字节的数据Redis就无需再次分配空间了。而Redis内存碎片的产生也是因为这个策略同样如客户端申请一个20字节的空间Redis会分配一个32字节的空间后续不在增加数据了就浪费了12字节的空间这就是内存碎片。 可以使用 info memory 查询内存的使用详细信息mem_fragmentation_ratio 大于1.5表示内存碎片严重,需要处理了。
如何解决Redis的内存碎片问题
重启Redis数据重建内存碎片问题会得到大大改善线上一般不允许这么操作。开启内存碎片自动清理 config set activedefrag yes;#表示内存碎片的字节数达到 100MB 时开始清理active-defrag-ignore-bytes 100mb;#表示内存碎片空间占操作系统分配给 Redis 的总空间比例达到 10% 时开始清理active-defrag-threshold-lower 10;如有不正确的地方请各位指出纠正。