一、什么是数据淘汰
当新数据进入redis之前,会调用freeMemoryIfNeeded()检测内存是否充足。如果内存不满足加入数据的最低要求,redis就会临时删除一些数据来存储新的数据。
清理数据的策略称为逐出算法
逐出数据的过程不是100%能够清理出可使用的空间,若不成功则反复执行。当所有数据都尝试完毕后仍达不到要求则会出现错误信息
(error)OOM command not allowed when used memory>'maxmemory'
二、相关配置
1.maxmemory ?mb
最大可使用内存,默认0表示不限制,生产通常为物理内存的50%以上
2.maxmemory-samples count
每次选取待删除数据的个数,采用随机获取数据的方式作为待检测删除数据
3.maxmemory-policy policy
对数据进行删除的选择策略
检测易失数据(可能会过期的数据集server.db[i].expires)
①volatile-lru:挑选最近最少使用的数据进行淘汰
②volatile-lfu:挑选最近使用次数最少的数据进行淘汰
③volatile-ttl:挑选将要过期的数据进行淘汰
④volatile-random:任意选择数据进行淘汰
检测全库数据(所有数据集server.db[i].dict)
①allkeys-lru:挑选最近最少使用的数据进行淘汰
②allkeys-lfu:挑选最近使用次数最少的数据进行淘汰
③allkeys-random:任意选择数据进行淘汰
放弃数据驱逐
①no-enviction:禁止驱逐数据(redis4.0中默认策略),会引发错误OOM
三、数据淘汰策略配置依据
使用INFO命令输出监控信息,查询缓存keyspace_hits和keyspace_misses的次数,根据业务需求调优redis配置
版权声明:本文为apricotCandy原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。