Redis

首页 -  Redis  -  redis缓存淘汰优化,redis缓存淘汰策略

redis缓存淘汰优化,redis缓存淘汰策略

redis缓存淘汰优化,redis缓存淘汰策略

redis 内存数据集大小上升到一定大小的时候,就会进行数据淘汰策略。如果不淘汰经常不用的缓存数据,那么正常的数据将不会存储到缓存当中。 

我们通过配置redis.conf中的maxmemory这个值来开启内存淘汰功能。 

maxmemory

值得注意的是,maxmemory为0的时候表示我们对Redis的内存使用没有限制 根据应用场景,

选择淘汰策略 maxmemory-policy noeviction 

内存淘汰的过程

1.首先,客户端发起了需要申请更多内存的命令(如set)。

2.然后,Redis检查内存使用情况,如果已使用的内存大于maxmemory则开始根据用户配置的不同淘汰策略来淘汰内存(key),从而换取一定的内存。

3.最后,如果上面都没问题,则这个命令执行成功。

动态改配置命令

此外,redis支持动态改配置,无需重启。 

设置最大内存

config set maxmemory 100000

设置淘汰策略

config set maxmemory-policy noeviction

内存淘汰策略 

volatile-lru 

1.从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰。

allkeys-lru 

2.从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰 

volatile-lfu 

3.从设置了过期时间的数据集(server.db[i].expires)中选择某段时间之内使用频次最小的键值对清除掉 

allkeys-lfu 

4.从所有的数据集(server.db[i].dict)中选择某段时间之内使用频次最少的键值对清除

volatile-ttl 

5.从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰 

volatile-random

6.从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰

allkeys-random 

7.从数据集(server.db[i].dict)中任意选择数据淘汰 

no-enviction

8.当内存达到限制的时候,不淘汰任何数据,不可写入任何数据集,所有引起申请内存的命令会报错。 

算法文章:(https://blog.csdn.net/ZYZMZM_/article/details/90546812)

如何选择淘汰策略 

下面看看几种策略的适用场景 

allkeys-lru :如果我们的应用对缓存的访问符合幂律分布,也就是存在相对热点数据,或者我们不太清楚我们应用的缓存访问分布状况,我们可以选择 allkeys-lru策略。 

allkeys-random :如果我们的应用对于缓存key的访问概率相等,则可以使用这个策略。 

volatile-ttl:这种策略使得我们可以向Redis提示哪些key更适合被eviction。 

另外,volatile-lru策略和volatile-random策略适合我们将一个Redis实例既应用于缓存和又应用于持久化存储的时候,然而我们也可以通过使用两个Redis实例来达 到相同的效果,值得一提的是将key设置过期时间实际上会消耗更多的内存,因此我们建议使用allkeys-lru策略从而更有效率的使用内存

(0)
分享:

本文由:xiasohu168.com 作者:xiaoshu发表,转载请注明来源!

标签:

相关阅读