Redis小功能大用处-replica-ignore-maxmemory

vincent0809
发布于 2022-4-14 20:56
浏览
0收藏

由于诸多原因,现在已经很少能长篇大论介绍Redis的相关技术,但日常工作以及脑子中经常想整理和总结一些Redis的点点滴滴,既能帮助自己记录问题,又能帮助他人减少碰到类似问题,于是有个想法,准备写一个小的系列:Redis小功能大用处。

 

本文将介绍Redis 5后一个新的配置replica-ignore-maxmemory (默认开启)

 

一、问题


1.现象:


 • 缓存场景:允许逐出,常年逐出。
 • 主从不一致:主从键值个数不一致。
 • 故障切换后,命中率下降穿透DB,可用性下降,故障!
 • 版本:4.0.14
 • 从节点:read only

Redis小功能大用处-replica-ignore-maxmemory-鸿蒙开发者社区

 

2. 简单分析


常见的不一致大概几种情况

 

 • maxmemory不一致。
 • 数据结构优化参数不一致:查看ziplist相关、quicklist相关等配置一致。


二、错误认知:从节点更新数据完全听从主节点


1. 客户端命令:yes


2. 过期删除命令:yes(since 4.0.11彻底解决)


具体参考Redis2.8-4.0过期键优化详解

 

3. 逐出删除命令:各干各的,主依然同步给从


无论是all-keys、还是volatile,主节点和从节点逐出的key肯定不可能完全一样(因为LRU也是近似算法),但主节点会自己删除的key命令同步给从节点,长此以往master节点数据会slave节点多,具体可以参考server.c每次处理命令都要做maxemory的检测和处理,直到满足条件,才会执行命令call

Redis小功能大用处-replica-ignore-maxmemory-鸿蒙开发者社区

 

三、为什么这样设计


缓存场景,运行丢数据,没有过多考虑命中率问题。

 

四、Redis 5.0的改进

Redis小功能大用处-replica-ignore-maxmemory-鸿蒙开发者社区

 

含义很明显:从节点不会自己逐出,下面代码也有简单说明

 

 • 配置名:replica-ignore-maxmemory
 • 配置别名:slave-ignore-maxmemory
 • 可以动态修改:MODIFIABLE_CONFIG
 • 默认值为1:yes

Redis小功能大用处-replica-ignore-maxmemory-鸿蒙开发者社区

 

evict.c的变化:从节点且开启了repl_slave_ignore_maxmemory不参与逐出

Redis小功能大用处-replica-ignore-maxmemory-鸿蒙开发者社区

 

五、最后


本文只是介绍一个很实用的配置,内容比较简单,请勿喷。

 

文章转自公众号:Redis开发运维实战

 

 

分类
标签
收藏
回复
举报
回复
    相关推荐