开发者学堂课程【Redis 入门到精通(进阶篇):删除策略-逐出策略】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/765/detail/13441
删除策略-逐出策略
目录
一,逐出算法的应用
二,Redis 删除策略总结
一,逐出算法的应用
1.新数据进入检测
(1).当新数据进入 redis 时,如果内存不够时的方法
Redis 使用内存存储数据,在执行每一个命令前,会调用freeMemoryflNeed() 检测内存是否充足,如果内存不满足新加入数据的最低存储要求,redis 要临时删除一些数据当前指令清理存储空间。清理数据的策略成为逐出算法。
(2).注意点:逐出数据的过程不是 100% 能够清理出足够的可使用内存空间,如果不成功反复执行。当对所有数据尝试完毕后,如果不能达到内存清理的要求,将出现错误信息。错误信息一般表现为(error)OOMcommand not allowed when used memory>’maxmemory’
2.影响数据逐出的相关配置
(1).最大可使用内存
最大可使用内存是 maxmemory,是占用物理内存的比例,默认值为0,表示不限制,生产环境中根据需求设定,通常设置在50%以上。
(2).每次选取待删除数据的个数
每次选取待删除数据的个数是 maxmemory-sample。它选取数据时并不会全库扫描,导致严重的性能消耗,降低读写性能。因此采用随机获取数据的方法作为待检测删除数据。
(3).删除策略
删除策略是 maxmemory-policy,是达到最大内存后的,对被挑选出来的数据进行的策略。
(4).检测易失数据(可能会过期的数据集 sever.db[i].expires)
①.Volatile-Iru:挑选最近最少使用的数据淘汰
②.Volatile-Ifu:挑选最近使用次数最少的数据淘汰
③.Volatile-ttl:挑选将要过期的数据淘汰
④.Volatile-random:任意选择数据淘汰
此下三张图为老师讲解 Iru 与 Ifu 的策略:
(5).检测全库数据(所有数据集sever.db[i].dict)
①.Allkeys-Iru:挑选最少使用的数据淘汰
②.Allkeys-Ifu:挑选使用次数最少的数据淘汰
③.Allkeys-random:任意选择数据淘汰
(6).放弃数据驱逐
no-enviction(驱逐):禁止驱逐数据(redis4.0中默认策略),会造成数据的内存泄露,这会引发错误 OOM(OutOf Memory)
注意:建议使用 Volatile-Iru 的策略,这些策略可以在配置文件中的 maxmemory-policy volatile-Iru 中写。
3.数据逐出策略配置依据
使用 INFO 命令输出监控信息,查询缓存 hit(命中)和 miss(丢失)的次数,根据业务需求调优 Redis 配置
以下为与 info 命中次数相关的代码:
evicted_keys:0
keyspace_hits:18
keyspace_misses:0 puAsub_channe1s:0
pubsub_patterns:0
Latest_fork_usec:1029
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active sefrag_key_misses:0
二,Redis 删除策略总结
1.数据删除策略
(1).定时删除:定时删除是指规定时间,立马操作。它更要求内存,但是对 cpu 压力过大。
(2).惰性删除:惰性删除与定期删除相反,比较珍惜 cpu,但是对储存空间不太珍惜。
(3).定期删除:定期删除属于定时删除与惰性删除的折中方法,属于随机策略加上重点策略的一个方式。
2.数据逐出策略
八种策略


