Redis之最大内存置换策略

作者:稳网互联来源:官方更新时间:2018-11-13点击数:3139

Redis提供了maxmemory字段来限制使用的最大内存. 既然提供了最大内存限制, 那么当我们程序达到最大值时, Redis使用了多种策略进行置换.Redis建议最大内存设置为物理内存的一半。


Redis置换策略字段maxmemory-policy

volatile-lru : 对具有生存周期的key进行LRU算法置换.

volatile-random : 对具有生存周期的key进行随机置换.

volatile-ttl : 对具有生存周期的key随机进行抽样, 置换出抽样中生存周期最短的.

allkeys-lru : 对整个db进行LRU算法置换

allkeys-random : 对整个db进行随机置换

noeviction : 不进行置换


volatile-random和allkeys-random策略, Redis直接在相应的数据集上随机并置换.


volatile-ttl需要抽样, 抽样的大小由maxmemory-samples控制, 默认maxmemory-samples为5, 抽样越大算法精确度越高,但是消耗也越大.


volatile-lru和allkeys-lru是对抽样的数据中选出最近最久未使用的Key置换出去.这里抽样的大小默认是16, 如果我们设置maxmemory-samples并且大于16的话, 抽样值和最大的保持一致.Redis设置了一个可置换池, 大小为16, 每次先进行抽样, 抽样之后与置换池中的数据进行比较, 选出最近最久未使用的16个Key放入置换池中, 从置换池中再选择一个Key进行置换.