redis数据淘汰策略

一、什么是数据淘汰

当新数据进入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版权协议,转载请附上原文出处链接和本声明。