好饭不怕晚,扒一下Redis的配置文件(四)

286 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

今天我们接着上篇文章中的内容继续学习下Redis中的配置。话不多说,直接开始。

MEMORY MANAGEMENT

最大缓存策略

maxmemory-policy:

  • volatile-lru:使用LRU(最近最少使用)算法移除key,只对设置了过期时间的键
  • allkeys-lru:使用LRU算法移除key(所有key
  • volatile-lfu:对过期键使用 LFU(最不经常使用)近似算法
  • allkeys-lfu:对所有键使用 LFU 近似算法
  • volatile-random:在过期集合中移除随机的key,只对设置了过期时间的键
  • allkeys-random:移除随机的key
  • volatile-ttl:移除那些TTL值最小的key,即那些最近要过期的key
  • noeviction:不进行移除。针对写操作,只是返回错误信息(默认)(去公司观察维度,不应该选择这个)

LRU算法、LFU算法或者TTL算法都是不是很精确算法,而是个近似算法。

使用策略规则:

  1. 如果数据呈现幂律分布,也就是一部分数据访问频率高,一部分数据访问频率低,则使用allkeys-lru
  2. 如果数据呈现平等分布,也就是所有的数据访问频率都相同,则使用allkeys-random

样本数量

设置样本数量,上边提到的算法都并非是精确的算法,而是估算值,所以你可以设置样本的大小。

maxmemory-samples 5

默认值是 5,也就是说Redis随机挑出5个键,然后选出一个最符合条件的。对LRU来说5是比较合适的。10已经很接近于真正的LRU,但会消耗更多的CPU。3会更快但没有那么精确。

副本忽略最大内存

replica-ignore-maxmemory yes

Redis 5开始,默认情况下,replica节点会忽略maxmemory设置(除非在发生failover后,此节点被提升为master节点)。

这意味着只有master才会执行过期删除策略,并且master在删除键之后会对replica发送DEL命令。

这个行为保证了masterreplicas的一致性,并且这通常也是你需要的,但是若你的replica节点是可写的,或者你希望replica节点有不同的内存配置,并且你确保所有到replica写操作都幂等的,那么你可以修改这个默认的行为 (请确保你明白你在做什么)。

注意 默认情况下replica节点不会执行过期策略,它有可能使用了超过maxmemory设定的值的内存。因此你需要监控replicas节点所在的机器并且确保在master节点到达配置的maxmemory大小时,replicas节点不会超过物理内存的大小。

今天我们就先说到这了,至于配置文件中关于主从复制和持久化部分我们将在后续的内容进行讲解。

添加阿Q可以加入技术交流群进行灵魂交流!后台留言领取java干货资料:学习笔记与大厂面试题!