Redis 配置文件最佳解析

2023-11-17

配置文件

https://raw.githubusercontent.com/redis/redis/7.0/redis.conf

通用模板

~~~

引入

  • include
# 用于引入其他配置文件,支持使用通配符
# 根据从上到下的顺序,读取配置项,对同一个配置项多次设置,总是取最后配置的值
include <Path>
引入多个配置文件
	include /path/to/My1.conf
	include /path/to/My2.conf

优先级例子:
	redis.conf  主配置
		include /path/myRedis.conf
		tcp-keepalive 300
	myRedis.conf  引入配置
		tcp-keepalive 400
	最终应用的是:
		tcp-keepalive 300	

模块

  • loadmodule
# 启动时加载模块,支持加载多个模块
loadmodule  <Path>
loadmodule  /path/to/My_module1.so
loadmodule  /path/to/My_module2.so

网络

  • bind
# 用于绑定网卡,默认只能本机访问,绑定网卡后其他用户就可以根据绑定的网卡的ip地址进行访问
bind  <IP>

如何取值?
1.监听多个地址用空格分隔
bind 192.168.1.100 10.0.0.1
2.环回
bind 127.0.0.1 ::1
3. ~~
 * -::* 
  • bind-source-addr
用于提供一个特定的网卡,提供给 复制模式,集群模式,哨兵模式 这种非用户访问的 
bind-source-addr  <IP>
  • protected-mode
保护模式:当开启保护模式且默认用户没有密码则只能接收本机本地访问
protected-mode <yes/no>
  • enable-protected-configs
  • enable-debug-command
  • enable-module-command
三个安全相关的选项,默认是关闭的
enable-protected-configs <no / yes / local>
enable-debug-command  <no / yes / local>
enable-module-command  <no / yes / local>

no 阻止任何链接
yes 允许任何链接
local 仅允许本地链接
  • port
绑定端口,默认6379,如果值为0表示禁用
port <端口号>
  • tcp-backlog
tcp 链接 缓存数
tcp-backlog 511
  • timeout
客户端连接空闲N秒后关闭链接,如果值为0则表示禁用
timeout 0
  • tcp-keepalive
tcp心跳检测,用于验证tcp连接后检测对方是否存活
其原理是tcp建立链接后每隔N时间就发送一次ACK消息,对方收到后会进行回复ACK消息,这样就可以知道对方是否存活,默认 300秒,如果为 0秒则不进行检测
tcp-keepalive 300
  • socket-mark-id
打标记,不知道
socket-mark-id 0

TLS/SSL

默认情况是禁用的

  • tls-port
开启tls-port端口需要将port给关闭,没有测试可能也不需要关闭
port 0
tls-port <端口号>
  • tls-cert-file
  • tls-key-file
  • tls-key-file-pass
配置X.509正数或者私钥
tls-cert-file <文件.crt>
tls-key-file <文件.key>
tls-key-file-pass secret
  • tls-client-cert-file
  • tls-client-key-file
  • tls-client-key-file-pass
通常 Reids对服务器功能(接收链接)和客户端功能(复制,集群,总线连接)使用相同的证书
也可以通过 tls-client....区分服务器端功能和客户端功能使用的证书
  • tls-dh-params-file
配置DH参数文件以启用Diffie_Hellman(DH)密钥交换,旧版本的OpenSSL < 3.0可能需要
tls-dh-params-file <redis.dh>
  • tls-ca-cert-file
  • tls-ca-cert-dir
配置CA证书
tls-ca-cert-file <ca.crt>
tls-ca-cert-dir </etc/ssl/certs>
  • tls-auth-clients
默认情况下,验证客户端的证书
该参数
tls-auth-clients <no / optional>
no : 不验证客户端的证书
optional : 客户端可以不传证书,如果传了则会进行校验
  • tls-replication
默认情况副本不会通过tls与主服务器建立链接
通过取值yes 让副本使用tls与主服务器建立通信
-tls-replication yes
  • tls-cluster
默认情况加 Redis集群是通过TCP链接,可以通过取值yes使用TLS通信
tls-cluster yes
  • tls-protocols
默认仅启用 TLSv1.2 和TLSv1.3,也可以通过取值指定支持旧版本的TLS,双引号包裹 空格分隔
tls-protocols <"TLSv1.2 TLSv1.3">
  • tls-ciphers
加密,仅适用于 TLSv1.2
tls-ciphers <DEFAULT:!MEDIUM>
  • tls-ciphersuites
加密,适用于 TLSv1.3
tls-ciphersuites <TLS_CHACHA20_POLY1305_SHA256>
  • tls-prefer-server-ciphers
选择密码时,使用服务器的首选项而不是客户端的
首选项。默认情况下,服务器遵循客户端的偏好。
tls-prefer-server-ciphers yes
  • tls-session-caching
关闭TLS会话缓存,默认是开启的
tls-session-caching <no>
  • tls-session-cache-timeout
缓存TLS会话的默认超时时间,默认300秒
tls-session-cache-timeout 60

通用

  • daemonize
Redis默认前台运行,通过取值yes可以改为后台运行
daemonize yes
  • supervised
#   supervised no      - no supervision interaction
#   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
#                        requires "expect stop" in your upstart job config
#   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
#                        on startup, and updating Redis status on a regular
#                        basis.
#   supervised auto    - detect upstart or systemd method based on
#                        UPSTART_JOB or NOTIFY_SOCKET environment variables

supervised <no / upstart / systemd / auto>
  • pidfile
用于指定pid文件
Redis 前台运行 且没有指定Pid文件 则不进行创建
Redis 后台运行 且没有指定Pid文件 默认在/var/run/redis.pid

引用:
	pid文件是什么:
		以Nginx为例,每个Nginx都是一个进程且每个进程都有一个全局为的Id号,叫做pid
		进程是无法检测其他进程的,所以进程间无法沟通,那么在Redis启用的时候也不知道当前有没有Redis服务为了能进行沟通
		必须有一个东西来传递消息,这个东西就是pid文件,里面保存的是进程的Id
	pid文件作用:
		应用程序为了防止用户启动多次 ---- 
		当Nginx启动时,会先检测有没有nginx.pid文件,如果没有则创建一个并且把自身pid写进去,当nginx启动时,如果检测到已经有nginx.pid文件
		此时会有两种情况:
			1. nginx检测到没有哪个进程的id是文件中写的id,那么就认为pid指向的进程不存在,那么nginx会启动
			2. nginx检测到pid指向的进程存在,说明nginx已经启动,那么本次启动会报错
  • loglevel
指定日志级别
debug  大量信息,开发/测试阶段
verbose  详细信息
notice  通知
warning  警告
loglevel <debug / verbose / notice / warning>
  • logfile
默认输出到屏幕,如果是后台运行则发送到 /dev/null , 指定日志文件名称会将日志输出到文件
logfile <"">
  • syslog-enabled
是否启用syslog日志
syslog-enabled <no / yes>
  • syslog-ident
指定系统日志标识
syslog-ident redis 
  • syslog-facility
指定系统日志facility。必须是 USER 或介于 LOCAL0-LOCAL7 之间
syslog-facility local0
  • crash-log-enabled
禁用内置日志
crash-log-enabled <no / yes>
  • crash-memcheck-enabled
不清楚
crash-memcheck-enabled <no /yes>
  • databases
指定数据库的数量,默认16个 0~15
databases 16
  • always-show-logo
不知道,默认关闭
always-show-logo <no / yes>
  • set-proc-title
修改进程的标题,默认开启
set-proc-title <no / yes>
  • proc-title-template
进程标题的模板,模板变量在大括号中指定
# {title} 父进程执行的进程名称,或子进程的类型。
# {listen-addr} 绑定地址或 '*' 后跟 TCP 或 TLS 端口侦听,或
# Unix 套接字(如果只有它可用)。
# {server-mode} 特殊模式,即“[sentinel]”或“[cluster]”。
# {port} TCP 端口监听,或 0。
# {tls-port} TLS 端口监听,或 0。
# {unixsocket} Unix 域套接字监听,或“”。
# {config-file} 使用的配置文件的名称。

proc-title-template "{title} {listen-addr} {server-mode}"

快照

  • save
Redis 默认开启 RDP 持久化
save 3600 1 300 100 60 10000  默认配置
如果有1次写入操作则3600秒后保存一次
如果有100次写入操作则300后保存一次
如果有10000次写入操作则60秒后保存一次

save <秒> <写入操作次数>
save ""  禁用 RDP

  • stop-writes-on-bgsave-error
快照出错时是否禁止redis 写入操作 默认yes
stop-writes-on-bgsave-error <no /yes>
  • rdbcompression
将存储到磁盘的快照进行压缩处理,会使用一些CPU的资源,默认yes
rdbcompression <no / yes>
  • rdbchecksum
快照存储完成后通过CRC64算法进行数据校验,会造成一些性能消耗,默认yes
rdbchecksum <no / yes>
  • sanitize-dump-payload
不知道
  • dbfilename
设置rdb文件的名称,默认 dump.rdb
dbfilename <dump.rdb>
  • rdb-del-sync-files
主从复制时,是否删除用于同步的从机上的RDB文件。默认是no,不会删除这台节点上的rdb文件。redis主从复制是通过rdb文件传输实现的,所以当机器没开启AOF和RDB删除才有意义,如果AOF和RDB开启,redis就会自己做持久化,此配置配置为yes也会忽略
rdb-del-sync-files <no / yes>
  • dir
指定存储的目录
dir <./>

复制

  • replicaof
配置主服务的ip 和端口
replicaof <masterIp> <masterPort>
  • masterauth
如果主服务器需要密码在这里配置
masterauth <master-Password>
  • masteruser
用于配置链接主服务器的用户
masteruser <username>
默认用户无法运行PSYNC,最好提供一个特殊的用户

#新的认证方式 ?
AUTH <username> <password>
  • replica-serve-stale-data
如果失去和主机的链接,或者正在同步时,有客户端操作,有两种方式
1. yes 执行客户端的操作,可能会有假数据 或者空数据
2. no 报错(HOST and LATENCY),但是不包括 info,replicaof,auth,shutdown~~~等等操作
replica-serve-stale-data <no / yes> 默认yes
  • replica-read-only
主从时期,从库是否只读,默认yes 只读
replica-read-only <on / yes>
  • repl-diskless-sync
目前默认使用无硬盘复制,不需要通过RDB文件同步,而是直接传输数据,如果将Master的RDB文件 落在 Slave中,如果Slave发生重启会重新读取RDB文件,但是时间点又不确认可能会造成数据不一致
repl-diskless-sync <no / yes> 默认yes
  • repl-diskless-sync-delay 5
配置同步的延时,
如果使用无硬盘复制,因为master一旦启动了socket传输,将不能在为这之后的slave传输数据,需要等待到下一次,如果开启延时,那么master会延时N秒,目的是为了尽可能的汇集更多的slave同步请求
repl-diskless-sync-delay 5
  • repl-diskless-sync-max-replicas
如果是无硬盘传输,如果预期的最大副本数已连接,则可以在最大延时之前进行复制
在主服务器配置
repl-diskless-sync-max-replicas <int> 默认 0 标识未定义
  • repl-diskless-load
1. RDB文件落在Slave磁盘上模式,通常情况下磁盘比网络慢,存储和加载RDB文件会增加复制时间,也会增加Master的复制写内存和Slave的缓冲区
2. 无硬盘模式是测试阶段,因为直接从socket获取rdb数据会有一个问题,那就是需要拿到完整的rdb数据才可以进行同步,针对这个问题以下由几种方案
disable   不使用 无硬盘方案
on-empty-db 只有在完全安全才使用无硬盘
swapdb 在解析socket的rdb数据时,将当前数据库的数据放到内存中,这样可以在复制的时候为客户端提供服务,但是可能会造成内存溢出
repl-diskless-load <disabled / on-empty-db / swapdb> 默认是disable
  • repl-ping-replica-period
Master 心跳检测 Slave
repl-ping-replica-period <秒> 默认10秒
  • repl-timeout
超时时间,超时条件:
1.Slave角度, N秒没有收到Master 传输的数据
2.Slave角度,N秒没有收到Master的数据包或者ping
3.Master角度,N秒没有收到Slave的 ack
repl-timeout <秒> 默认60秒
  • repl-disable-tcp-nodelay
延时通信
no: 不禁用,Master的指令无论大小都及时发送给Slave,但是会增加网络带宽,合适主从网络环境良好的场景
yes: 禁用,主从链接都是TCP链接,所以当网络环境一般的情况下,交给Linux内核对TCP数据包进行优化,也就是合并较小的TCP数据包从而节省带宽,默认发送时间间隔取决于Linux内核,一般40毫秒,适合跨机房部署的场景
repl-disable-tcp-nodelay <no / yes> 默认no
  • repl-backlog-size
缓冲区
如果从库断开链接,重新连接后,那么不需要全量同步,而是将断开链接~重新连接之间的数据进行复制即可,该配置就是用来配置当从库断开链接后将要同步的数据进行缓存起来,等待从库重新连接后发送给从库
repl-backlog-size <Nmb> 默认 1mb 
  • repl-backlog-ttl
如果Master在N ttl没有连接到从库则将缓冲区的文件释放,如果值为0则标识永不释放缓冲区的数据
repl-backlog-ttl 3600  
  • replica-priority
灾备方案
	如果Master异常,Sentinel使用它来选择Slave提升为Master
优先级
	Sentinel会优先选择数值低的Slave提升为Master
	0 是一个特殊的优先级,Sentinel不会选择数值为0的Slave为Master
replica-priority 100 默认100
  • propagation-error-behavior
如果Slave在同步的RDB或AOF中的指令出现错误,可以有以下方式进行处理
ignore: 忽略错误并继续执行指令
panic:   不知道
panic-on-replicas:  不知道
propagation-error-behavior ignore
  • replica-ignore-disk-write-errors
Slave无法将从Master接收到的指令持久化到磁盘时,默认情况下Slave会异常
如果需要兼容低版本的Redis,可以调整为yes,会记录警告并执行从Master获得的写入指令
replica-ignore-disk-write-errors <no / yes> 默认no
  • replica-announced
是否让Sentinel的Redis服务列表中展示
但是不会影响选举的时候会选举忽略的Redis服务器,如果不想让Sentinel选举该Redis需要配合使用 replica-priority 将值设为0
replica-announced <no / yes> 默认yes 会被Sentinel发现
  • min-replicas-to-write
  • min-replicas-max-lag
如果从库的数量少于N个 并且 延时时间小于或等于N秒 ,那么Master将停止发送同步数据
计算方式:
	从库数量: 根据心跳
	延时: 根据从库最后一次ping进行计算,默认每秒一次
例子:
	最少需要3个延时小于10秒的从库,才会发送同步
	min-replicas-to-write 3 
	min-replicas-max-lag 10
如果这两项任意一项的值为0则表示禁用
  • replica-announce-ip
  • replica-announce-port
Slave项Master声明实际的ip和port
主从 集群 sentienl都是通过 Redis服务 info指令得到的ip和port进行自动发现redis服务!!
因为网络环境的原因,如果两台redis在docker中,两台redis地址实际是docker提供的网络地址(172.17.0.xx),但是sentinel却在另一网络环境是访问不到docker提供的网络地址,所以可以通过这两个配置项用来指定info指令展示的ip和端口信息,用来指定当前docker宿主机的ip和port,这样sentinel就可以访问docker所在宿主机的ip和port用来发现redis服务,宿主机在转发到docker容器中
replica-announce-ip 5.5.5.5 
replica-announce-port 1234 

KEYS TRACKING

  • tracking-table-max-keys
key失效管理
Redis通过是失效表记录,记录客户端访问了使用哪个key,如果key被修改过则将表中记录删除,并将失效的消息发送给客户端
失效表默认1m,如果超出设置则开始淘汰失效表的key,~~~
好像没什么用~~

取值范围
	 0: 没有限制

tracking-table-max-keys 1000000

安全

客户端

  • maxclients
Redis 最大接受客户端链接数量
maxclients 10000

内存管理

https://cloud.tencent.com/developer/article/1692645

  • maxmemory
设置内存大小,如果内存使用超过设定的值,则会根据maxmemory-policy设置的策略进行淘汰key
如果内存满了且没有淘汰key,如果在由写入指令(set)会报错,但是可以执行读取指定(get)
maxmemory <bytes>  默认注释,根据实例分配的内存大小
  • maxmemory-policy
当内存使用超出 maxmemory 设置的值或已超出,当前分配给redis实例的内存时,可以选择具体的策略处理key

# volatile-lru -> 在所有设置过期时间的key中,使用LRU算法淘汰。
# allkeys-lru -> 在所有key中,使用LRU算法进行淘汰。
# volatile-lfu -> 在所有设置过期时间的key中,使用LFU 算法淘汰。
# allkeys-lfu -> 在所有key中,使用LFU 算法淘汰。
# volatile-random ->  在所有设置过期时间的key中,使用随机算法淘汰。
# allkeys-random -> 在所有key中,使用随机算法淘汰。
# volatile-ttl -> 在设置过期时间的key中,把最早过期时间的key淘汰
# noeviction -> 不淘汰key,只在写操作时返回错误。

# LRU 最近最少使用
# LFU 最少使用

maxmemory-policy noeviction   默认不淘汰key,有写入指令时会报错
  • maxmemory-samples
用于设置选出淘汰key的数量样本
默认 选出5个,然后从中根据淘汰算法,淘汰1个key
Redis为了节省CPU成本,对 LRU / LFU 做了处理,并不是精确算法,相对模糊,配合其他参数一起使用
取值范围: 3 , 5 , 10
	3 速度更快,但不准确
	5 默认值,
	10 更接近LRU / LFU 算法,但是CPU资源会使用的更多
maxmemory-samples  5 
  • maxmemory-eviction-tenacity
设置淘汰key的延时
线上写入的流量如果过大,内存满了淘汰key的时候延时越低,那么保存的数据越快,但是性能会有影响
取值范围:
	0: 最小延时
	10: 默认
	100: 不考虑延迟
maxmemory-eviction-tenacity 10 
  • replica-ignore-maxmemory
Redis5 开始 Key的淘汰都是由Master进行处理,然后发送DEL指定同步到Slave,但是如果Slave是可写 或者需要Slave由不同的内存大小设置并且确定所有可以的Slave也互相保持一致性,那么可以把值设置为no ,默认Slave是忽略最大内存限制的
replica-ignore-maxmemory yes
  • active-expire-effort
过期key的处理
1. 定时删除: 过期key,开启定时任务,过期时间到期执行
2. 惰性删除: 访问过期key的时候,将过期的key清理
3. 定期删除: 后台扫描过期的key ,默认过期key的数量不能超过内存10%,避免效果超过25%的CPU资源

取值范围
	1 ~ 10  值越大CPU消耗越大,越频繁
active-expire-effort 1

LAZY FREEING 异步

  • lazyfree-lazy-eviction
  • nolazyfree-lazy-expire
  • nolazyfree-lazy-server-del
  • replica-lazy-flush
  • lazyfree-lazy-user-del
  • lazyfree-lazy-user-flush
Redis 的 del指定默认是阻塞的,有很多场景用到了阻塞的删除指令,通过以下配置可以在特定的场景使用非阻塞的删除方式
lazyfree-lazy-eviction  :  淘汰key时
nolazyfree-lazy-expire  : 删除过期key时
nolazyfree-lazy-server-del : 执行一些指令时 例如rename
replica-lazy-flush : 主从同步数据时
lazyfree-lazy-user-del : 用户手动删除时
lazyfree-lazy-user-flush : 指定flushdb flush ~~时
取值范围:
	yes 采用非阻塞的删除方式
	no 采用阻塞的删除方式  默认

I/O

  • io-threads
扩展Redis I/O数量,默认是禁用的功能
默认Redis单线程的,但是也有一些操作时其他线程进行处理,例如异步删除key,慢i/o的链接等等
目前支持可以在不同的I/O处理客户端的网络读取和写入
默认情况时禁用的,官方建议至少4核或更多的机器上进行启用而建议保留一个核,如果超过8个线程没有太大的意义,只有遇到了性能问题才开启这部分

例如有4核CPU可以尝试使用2个或者3个I/O线程,如果有8核CPU可以尝试开启6个I/O线程
io-threads 4
  • io-threads-do-reads
设置多开启的线程是否设置为非读I/O
一般如果开启多个I/O,则说明性能遇到了瓶颈,一般瓶颈不是出现在读上,所以可以通过该设置将开启的I/O调整为非读

有两个方面可能会不生效
1. 在运行时期使用 config set 调整时
2. 启用SSL时

io-threads-do-reads <no,yes> 默认no

OOM

  • oom-score-adj
出现内存溢出时,Redis 主动控制 oom-score_adj 设置的值来决定 进程的死亡顺序

取值范围:
	no: 在所有其他进程之前先杀死后台子进程,并且在主进程之前杀死其他进程  《默认》
	yes:  相对的
	absolute:    把 oom-score-adj-values 直接写入到内核
	relative:  服务器启动,将值改为 -1000 ~ 1000 的范围内,
oom-score-adj <no> 
  • oom-score-adj-values
不知道
oom-score-adj-values 0 200 800

KERNEL transparent hugepage CONTROL

  • disable-thp

AOF

  • appendonly
是否开启AOF持久化
appendonly <no,yes> 默认no
  • appendfilename
指定aof文件名称,文件会自增
例子:
appendfilename "appendonly.aof"

appendonly.aof.1.base.rdb 基础文件
appendonly.aof.1.incr.aof, appendonly.aof.2.incr.aof 作为增量文件
appendonly.aof.manifest  清单文件
  • appenddirname
指定aof文件的存储路径
  • appendfsync
将实际数据存储在磁盘中
取值范围
	1. no   让操作系统自己决定什么时候将数据存储到磁盘中 ,性能高 ,不安全
	2. always  每次写入都通知操作系统,fsync  性能低,最安全
	3. everysec  每秒fsync一次 , 性能中等,安全性中等,最多丢失1秒的数据
appendfsync ererysec 默认的
  • no-appendfsync-on-rewrite
当 appendfsync 设置的时 alwasys / everysec 时,对磁盘执行大量I/O操作,在某些Linux配置中Redis调用fsync()可能会阻塞太久

为了防止手动或上一个AOF还在保存时正在进行时主进程又调用fsync() ,所以可以将该项的值设置成yes,那么appendfsync就会成为no模式但是如果出现问题丢失的数据可能会更多,所以默认no即可,除非出现了fsync长时间断断续续阻塞的现象,
no-appendfsync-on-rewrite no 默认
  • auto-aof-rewrite-percentage
  • auto-aof-rewrite-min-size
重写AOF,指定文件的增长百分比自动重写,隐式调用 BGREWRITEAOF

因为AOF记录的都是指令,有很多之前的写入的指令不需要记录了( 10分钟前写入了一个key设置的过期时间是3分钟 ,那么aof文件在3分钟后就没有必要记录这个key值了,这个是时间的例子, 大小也是一样)

这两个配置项配合一起使用,可能百分比设置了但是文件很小,就会一直重写aof

取值范围
	0 表示禁用自动AOF
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
  • aof-load-truncated
如果读取到一个错误的aof文件,由两种方案
取值范围
	1. yes 打印日志通知用户
	2. no 服务器报错并且拒绝启动
aof-load-truncated <no /yes> 默认yes
  • aof-use-rdb-preamble
基础文件选择RDB 还是 AOF
取值范围
	1. no 使用AOF
	2. yes 使用RDB
aof-use-rdb-preamble yes 
  • aof-timestamp-enabled
Redis 支持AOF中记录时间戳,支持特定时间点的恢复数据,但是可能会与现有的AOF解析器不兼容的方式更改AOF格式,默认关闭
aof-timestamp-enabled no

关闭

  • shutdown-timeout
关闭Redis时,允许等待Slave同步的最长时间
默认:如果配置了RDB,则等待RDB保存

取值范围
0 - 不等待Slave同步
N - 秒
shutdown 10
  • shutdown-on-sigint
  • shutdown-on-sigterm
针对SIGINT / SIGTERM 这两个指令做出不同的解决方案
取值范围 
default:  如果有需要保存的数据,则等待RDB保存,且等待Slave同步
save : 即便便有需要保存的数据,也会执行RDB
nosave :  有保存点,也不执行RDB
now : 不等待Slave同步
force : 如果Redis关机遇到问题则忽略

以上五个值,save 和 nosave不能一起使用外,其他都可以一起使用,例如
shutdown-on-sigint nosave force now

集群

Redis 如果使用的是集群,以下用”节点“来说明Redis
  • cluster-enabled
以集群的方式启动Redis,默认是关闭的
cluster-enabled yes
  • cluster-config-file
指定节点的配置文件,每个节点都需要不同的集群配置文件,不允许重复使用,由集群自动管理无需配置
cluster-config-file nodes-6379.conf
  • cluster-node-timeout
心跳-检测状态
如果超过指定N毫秒,就认为该节点是故障状态
cluster-node-timeout 15000
  • cluster-port
指定集群端口,集群总线监听的入站端口
取值范围:
0  自动绑定到 10000之后的某个端口
1~65535 指定端口号

cluster-port 12321
  • cluster-replica-validity-factor
集群节点故障检测:
当主节点发生故障时,其他Slave节点全部申请成为Master
但是不同的Slave的数据可能不一样,例如有的Slave可能和Master断开过,数据不全/陈旧数据,所以不应该提升为Master
这个参数就是用来判断,Slave节点与Master断线时间是否过长


两种方式进行检测
1、节点们彼此交换数据,对比偏移量
2、根据该参数判断,与主节点断开的时间
(node-timeout 超时时间 * cluster-replica-validity-factor 检测时间) + repl-ping-replica-period 最后ping的时间


cluster-replica-validity-factor 10
  • cluster-migration-barrier
用于保证每一个主节点都由N个从节点,前提是有足够的节点
如果某一个主节点出现问题后,会从其他富于的主节点分配一个从节点过来,确保每个主节点都有N个从节点
避免因为主节点挂掉而没有相应的从系欸但替换为主节点导致集群不可用

例如 cluster-migration-barrier 设置为1的情况下
主节点 1001  从节点 2001 2002
主节点 1002 从节点 2003 2004
如果主节点 1001 宕机后再次启动,是没有从节点的,执行check后,会从1002 匀出一个从节点给主节点 1001

cluster-migration-barrier 1
  • cluster-allow-replica-migration
自动集群配置
取值范围
no : 不启用自动集群配置
yes: 不允许从节点迁移,也不会让主节点下面没有从节点
cluster-allow-replica-migration yes
  • cluster-require-full-coverage
当一个主节点宕机且没有从节点进行故障恢复(选主)时 集群是否可用(是否能提供查询等操作)
取值范围
no: 可用
yes: 不可用
cluster-require-full-coverage yes/no
  • cluster-replica-no-failover
是否进行故障转移
取值范围
no: 不管
yes: 可以
cluster-replica-no-failover no
  • cluster-allow-reads-when-down
当集群状态为down时是否可以支持 查询操作
cluster-allow-reads-when-down no
  • cluster-link-sendbuf-limit
集权间互相传递消息的大小限制,默认 1G 默认禁用通过其他配置或指令开启
cluster-link-sendbuf-limit 0
  • cluster-announce-hostname “”
供外部链接
用于指定集群的主机名称
  • cluster-preferred-endpoint-type
供外部链接
cluster-preferred-endpoint-type ip
关于Docker的支持
因Docker的特殊网络环境,可能有的ip不通,所以提供下面几个参数用于指定节点间链接的ip
# cluster-announce-ip 10.1.1.5 
# cluster-announce-tls-port 6379 
# cluster-announce-port 0 
# cluster-announce-bus-port 6380 

SLOW LOG 慢日志

用于记录一些操作时操作
  • slowlog-log-slower-than
超过多长时间的指令会认为是超时指令
取值范围
N  微秒  1000000 = 1秒  如果是负数则表示禁用慢日志

  • slowlog-max-len
保存的长度,长度没有限制,但是会消耗内存,记录最新慢指令,且队列满的情况下,会删除最旧的慢日志记录
取值范围
N 整数
slowlog-max-len 128
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis 配置文件最佳解析 的相关文章

  • Redis+Docker+Django - 错误 111 连接被拒绝

    我正在尝试使用 Redis 作为使用 Docker Compose 的 Django 项目的 Celery 代理 我无法弄清楚我到底做错了什么 但尽管控制台日志消息告诉我 Redis 正在运行并接受连接 事实上 当我这样做时 docker
  • Spring Data Redis 覆盖默认序列化器

    我正在尝试创建一个RedisTemplatebean 将具有更新的值序列化器来序列化对象JSONredis 中的格式 Configuration class RedisConfig Bean name redisTemplate Prima
  • 超出 Redis 连接/缓冲区大小限制

    在对我们的应用程序服务器进行压力测试时 我们从 Redis 中得到以下异常 ServiceStack Redis RedisException 无法连接到 redis host 6379 处的 redis 实例 gt System Net
  • Redis 在键过期时更新排序集

    我有一个 Redis 服务器 其中包含一组键值对和一个排序集 提供这些键值对的键的索引 键值对可以进入 已完成 状态 此时需要在 1 小时后删除它们 这可以通过在键上设置到期时间来简单地实现 但从排序集中清除它们似乎更成问题 我可以有一个过
  • 没有适用于机器人的 Laravel 会话

    我在大型 Laravel 项目和 Redis 存储方面遇到问题 我们将会话存储在 Redis 中 我们已经有 28GB 的 RAM 然而 它的运行速度仍然相对较快 达到了极限 因为我们有来自搜索引擎机器人的大量点击 每天超过 250 000
  • Web API 缓存 - 如何使用分布式缓存实现失效

    我有一个 API 目前不使用任何缓存 我确实有一个正在使用的中间件 它可以生成缓存标头 Cache Control Expires ETag Last Modified 使用https github com KevinDockx HttpC
  • 使用 Redis 中的键

    我是 Redis 和键值数据库的新手 你能告诉我如何在redis中正确实现这种关系方法吗 我有一个关系表 其中两个键对应一个值 master id slave id 价值 Example 主站 ID 从属ID 价值 1 1 值1 2 1 值
  • 在redis中存储多个嵌套对象

    我想在redis中存储多个复杂的json数据 但不知道如何 这是我的 json 结构 users user01 username ally email email protected cdn cgi l email protection u
  • 如何通过ARM模板输出返回Redis的primaryKey?

    我正在尝试借助下面列出的 ARM 模板来部署 Redis 然后返回其主密钥 Azure 门户中 Redis 的 访问密钥 gt 主 下可用的秘密字符串 但是 我从管道 AzureResourceManagerTemplateDeployme
  • ServiceStack PooledRedisClientManager 故障转移如何工作?

    根据 git commit 消息 ServiceStack 最近添加了故障转移支持 我最初认为这意味着我可以关闭我的一个 Redis 实例 并且我的池客户端管理器将优雅地处理故障转移并尝试与我的备用 Redis 实例之一连接 不幸的是 我的
  • memcache、redis 和 ehcache 作为分布式缓存框架的比较 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要做出的决定之一是在我的系统中使用什么缓存框架 有这么多可供选择 我目前正在研究 redis ehcache 和 memcached
  • 在 Redis 中存储 IP 范围

    我有很多不同提供商的 IP 范围 例如 P1 192 168 1 10 192 168 1 50 192 168 2 16 192 168 2 49 P2 17 36 15 34 17 36 15 255 P3 我将此 IP 转换为 int
  • Redis 客户端忽略其上设置的配置选项并尝试连接到默认 IP 127.0.01

    在AWS中 我使用ElastiCache Redis服务器并使用节点作为后端和 promise redis 包 这就是我尝试连接到我的 redis 服务器端点的方法 client redis createClient host my red
  • Redis - 错误:值不是有效的浮点数

    我在 Redis 中有一个排序集 我试图通过在Python代码中使用zincrby来更新特定元素的计数器值 例如 conn zincrby usersSet float 1 user1 但它显示错误为 错误 值不是有效的浮点数 我在 cli
  • spring中如何使用jackson代替JdkSerializationRedisSerializer

    我在我的一个 Java 应用程序中使用 Redis 并且正在序列化要存储在 Redis 中的对象列表 但是 我注意到使用 RedisTemplate 会使用 JdkSerializationRedisSerializer 相反 我想使用 J
  • 执行 SET {Key} 超时,inst: 0,mgr: Inactive,queue: 2, qu=1, qs=1, qc=0, wr=1/1, in=0/0

    我正在尝试使用 StackExchange Redis 客户端将 90 KB pdf 文件保存到 Azure Redis 缓存中 我已将该文件转换为字节数组并尝试使用 stringSet 方法保存它并收到错误 Code byte bytes
  • Redis如何存储关联数组?设置、散列还是列表?

    我对 Redis 的所有可用存储选项有点困惑 我想做一些简单的事情 并且不想过度设计它 我正在与phpredis and Redis v2 8 6 我有一个需要存储的简单关联数组 我还需要能够通过其键检索项目并循环遍历所有项目 a arra
  • 与 StackExchange.Redis 并行执行?

    我有一个 100 万件商品的商店List
  • 从 Laravel 中的命令调用控制器方法

    我有一个通过 Redis Pub Sub 监听的命令 收到发布后 我想调用控制器方法 以便可以更新数据库 但是 我无法找到任何关于如何从项目内部但在路由外部调用带有参数的控制器方法的解决方案 我见过的最接近的东西是这样的 return re
  • Sidekiq 不处理队列

    有哪些可能的原因可以Sidekiq https github com mperham sidekiq阻止处理队列中的作业 队列已满 日志文件sidekiq log表示根本没有活动 因此队列已满但日志为空 并且 Sidekiq 似乎没有处理项

随机推荐

  • 如何导出论文高清图片

    打开ps 我是ps2021 将论文拖进ps 点击图像 选择想找的图片 左上角文件 导出 导出为 可以选择jpg格式 100 品质导出 得到高清大图
  • iOS 传文件到服务器,ios ftp上传文件到服务器

    ios ftp上传文件到服务器 内容精选 换一换 CDM支持周期性自动将新增文件上传到OBS 不需要写代码 也不需要用户频繁手动上传即可使用OBS的海量存储能力进行文件备份 这里以CDM周期性备份FTP的文件到OBS为例进行介绍 例如 FT
  • 清理电脑运行内存

    清理运行内存 电脑控制面板 管理工具 windows内存诊断 重启电脑 前言 现在好多电脑都只有8G运行内存 在大多数情况下都供给不了我们日常的工作娱乐的需求 简单来说用个ps软件都卡到飞起 这时候很多人就选择加装内存条 但是加装了内存条
  • 数仓体系效率全面提升!同程数科基于 Apache Doris 的数据仓库建设

    应用实践 数仓体系效率全面提升 同程数科基于 Apache Doris 的数据仓库建设 导读 同程数科成立于 2015 年 是同程集团旗下的旅游产业金融服务平台 2020 年 同程数科基于 Apache Doris 丰富的数据接入方式 优异
  • 基于Python的微博舆论分析,微博情感分析可视化系统(V2.0)

    简介 Python基于微博的舆情分析 情感分析可视化系统 微博舆情分析系统 项目后端分爬虫模块 数据分析模块 数据存储模块 业务逻辑模块组成 功能包括 登陆注册 用户管理 热门事件展示 舆情分析 包括舆情分析 情感分类 用户分布 关键词云图
  • 逆向爬虫-sojson混淆反调加密

    文章目录 一 获取sojson代码 二 sojson加密特点和原理 三 过sojson姿势方法 3 1 格式化正则释义 3 2 网页调试过sojson 3 3 静态文件替换过sojson 一 获取sojson代码 JS加密混淆 本次使用代码
  • 阶段性回顾

    阶段笔记 Day01 1 请你简单介绍下软件开发中系统架构的演变 单一应用 gt 垂直拆分 gt 分布式服务 gt 服务治理 SOA gt 微服务架构 2 远程调用的方式有几种 他们的区别如何 如何选择 远程调用有两种方式 RPC Remo
  • 编程每日一题_C程序设计_两整型数据求和

    问题描述 Calculate a b 问题来源https zoj pintia cn problem sets 91827364500 problems Time Limit 2000 ms Memory Limit 65536 KB In
  • HTML5做移动开发一定要搞明白MPA 与 SPA 的差别

    用HTML5做WEB与移动开发一定要搞明白MPA 与 SPA 的差别 刚开始可能会不明白 为什么习惯pc端web app开发 会发现Sencha Touch这样的框架 用起来有点别扭 老在想那熟悉的多页面开发方式 却总也找不到实现的接口 也
  • Mac系统下Flutter安装教程

    一 下载Flutter 1 第一种方式git repo方式 执行下列命令下载最新的flutter代码 系统请先安装Git git clone b beta https github com flutter flutter git 2 第二种
  • 如何解决:ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。

    如何解决 ConnectionRefusedError WinError 10061 由于目标计算机积极拒绝 无法连接 在阅读 Python编程 从入门到实践 17 1 6时遇到了这个问题 项目场景 import requests url
  • spyglass使用教程

    spyglass使用教程 ic 爱好者的博客 CSDN博客
  • vivo手机计算机恢复出厂设置,vivo手机系统恢复出厂设置里面清除所有数据

    哎呀 手机怎么又卡了 完了这局农药又要输了 这个破手机 才用了一年就卡的不要不要的了 是时候要通过恢复出厂设置来解决了 但它真的能让我们的手机变流畅吗 什么是恢复出厂设置 顾名思义 恢复出厂设置就是将手机里所有的设置还原到最开始时的状态 就
  • [网络安全自学篇] 三.Burp Suite安装配置、Proxy基础用法及流量分析示例

    最近开始学习网络安全相关知识 接触了好多新术语 感觉自己要学习的东西太多 真是学无止境 也发现了好几个默默无闻写着博客 做着开源的大神 接下来系统分享一些网络安全的自学笔记 希望读者们喜欢 上一篇文章分享了Chrome浏览器保留密码功能渗透
  • vue的transition动画条上下跳动

    vue部分
  • Dynamics 365 DevOps CI/CD之ConfigurationData

    ConfigurationData如省市区 门店地址这种业务类型的数据 还有系统自定义过程中配置或开发涉及的参数 需要在系统间进行同步 此处CI用到了Power Platform Tool这个工具 这个也是可以在Azure DevOps的商
  • 进度条程序

    package progressbar import java awt BorderLayout import java awt Container import java awt Dimension import java util Ar
  • java中FileReader的使用

    package com test io01 import java io File import java io FileNotFoundException import java io FileReader import java io
  • TTreeNode编程思路

    导读 TTreeNode编程思路 本问以TreeView为例子讲述 其他的用到TTreeNodes的控件的编程思想如出一辙 TreeView由节点构成 建树通过对TreeView items属性进行操作 Items是一个TTreeNodes
  • Redis 配置文件最佳解析

    配置文件 https raw githubusercontent com redis redis 7 0 redis conf 通用模板 引入 include 用于引入其他配置文件 支持使用通配符 根据从上到下的顺序 读取配置项 对同一个配