Redis 5.0.x 配置文件详解

文章目录

Redis 5.0.x 配置文件详解

Redis 启动方式

./redis-server /path/to/redis.conf

INCLUDES

# 额外载入配置文件,如果需要可以开启
# include /path/to/local.conf

MODULES

# loadmodule /path/to/other_module.so

NETWORK

bind
# 指定 redis 接收来自于该 IP 地址的请求
bind 0.0.0.0
protected-mode
# 保护模式,默认开启,拒绝外部访问,建议关闭 -- 设置为:no
protected-mode yes
port
# 监听端口号,默认 6379,如果设置为 0,redis 将不在 socket 上监听任何客户端连接
port 6379
tcp-backlog
# TCP 监听的最大容纳数量,高并发环境下,调整数值可以避免客户端连接缓慢的问题
tcp-backlog 511
# Linux 内核会影响该配置,需同时修改 "/proc/sys/net/core/somaxconn" 配置文件
[root@node1 ~]# cat /proc/sys/net/core/somaxconn
128
Unix socket
# 指定 redis 监听 Unix socket 路径,默认不启动,unixsocketperm 指定文件权限
# unixsocket /tmp/redis.sock
# unixsocketperm 700
timeout
# 设置客户端空闲超过 timeout ,服务端将断开连接,单位:秒,设置 0 则不断开,
timeout 0
tcp-keepalive
# 单位:秒,表示周期性使用 SO_KEEPALIVE 检测客户端是否处于健康状态,毕淼服务器阻塞,默认 300s,设置 0 则不会周期性检测
tcp-keepalive 300

GENERAL

daemonize
# 是否作为守护进程运行,默认 no,设置为 yes 则作为守护进程运行,pid 文件为 "/var/run/redis.pid"
daemonize no
supervised
# 可以通过upstart和systemd管理Redis守护进程
# 选项:
#    supervised no - 没有监督互动
#    supervised upstart - 通过将Redis置于SIGSTOP模式来启动信号
#    supervised systemd - signal systemd将READY = 1写入$ NOTIFY_SOCKET
#    supervised auto - 检测upstart或systemd方法基于 UPSTART_JOB或NOTIFY_SOCKET环境变量
supervised no
pidfile
# 指定 pid 文件位置
pidfile /var/run/redis_6379.pid
loglevel
# 定义日志级别 { debug| verbose| notice | warning}
    # debug(记录大量日志信息,适用于开发、测试阶段)
    # verbose(较多日志信息)
    # notice(适量日志信息,使用于生产环境)
    # warning(仅有部分重要、关键信息才会被记录)
loglevel notice
logfile
# 日志文件位置,当指定为 "空字符串" 为标准输出。如 redis 以守护进程运行,日志将会输出到 "/dev/null"
syslog
# 是否打开 syslog 功能 -- 日志记录到系统日志
# syslog-enabled no
# syslog 标识符
# syslog-ident redis
# 日志的来源、设备
# syslog-facility local0
databases
# 设置数据库的数量,默认使用的 DB 是 0,可以通过 select <DBid> 命令选择不同的数据库,DBid 从 0 开始。
databases 16

SNAPSHOTTING

save
# RDB 持久化方式 -- 可以 "注释掉所有 save 停止" 或 "save "" 停止"

save 900 1          # 900 秒内,如果至少有 1 个 key 值变化 -- 则保存
save 300 10         # 300 秒内,如果至少有 10 个 key 值变化 -- 则保存
save 60 10000       # 60 秒内,如果至少有 10000 个 key 值变化 -- 则保存
stop-writes-on-bgsave-error
# RDB 持久化失败后,是否继续进行工作。yes -- 不进行工作;no -- 继续工作。默认情况下,RDB 失败后,redis 会停止接受所有的写请求。
stop-writes-on-bgsave-error yes
rdbcompression
# 是否对 RDB 快照进行压缩存储,如果 yes 则采用 LZF 算法进行压缩,同时消耗 CPU 性能进行压缩
rdbcompression yes
rdbchecksum
# 存储快照后,是否进行 CRC64 算法进行数据校验,会增加 10% 的性能消耗
rdbchecksum yes
dbfilename
# RDB 持久化快照的的文件名
dbfilename dump.rdb
dir
# 设置快照文件的存放路径,必须是目录、不能是文件名
dir ./

REPLICATION

replicaof
# 主从复制,使用 replicaof 复制对应的 master ,默认关闭
# replicaof <masterip> <masterport>
masterauth
# 如果 master 需要密码认证,则在这里设置,默认不设置
# masterauth <master-password>
replica-serve-stale-data
# 当 replica 与 master 失去联系,或者复制正在进行的时候,replica 有两种表现:
    # 1. "配置 yes" -- replica 仍然会应答客户端请求,但返回的数据可能是过时、或数据可能是空的
    # 2. "配置 no" -- 一些命令的返回为 "SYNC with master in progress"
replica-serve-stale-data yes
replica-read-only
# replica 服务器只读
replica-read-only yes
repl-diskless-sync
# 主从数据复制是否使用无硬盘复制功能
repl-diskless-sync no
# "新的从节点" 和 "重连后不能继续备份的从节点",需要做所谓的 "完全备份",即将一个RDB文件从 "主节点" 传送到 "从节点"。
# 这个传送有两种方式:
    # 1. 硬盘备份(Disk-backed):redis 主节点创建一个新的进程,用于 RDB 文件写入硬盘。由父进程递增将文件传递给从节点
    # 2. 无硬盘备份(Diskless):redis 主节点创建一个新的进程,子进程直接把 "RDB 文件" 写到 "从节点的套接字",不需要使用到磁盘
    
# 硬盘备份:主节点的子进程生成 RDB 文件,一旦生成,多个从节点可以立即排成队列使用主节点的 RDB 文件
    # 适用于 硬盘速度快 && 网络速度慢
# 无硬盘备份:一次 RDB 传送开始,新的从节点到达后,需要等待现在的传送结束后,才可以进行新的传送
    # 适用于 硬盘速度慢 && 网络速度快
repl-diskless-sync-delay
# 当启用 "无硬盘备份",服务器等待一段时间后才会通过 "socket" 向从节点传送 RDB 文件,等待时间可配置
# "无硬盘备份" 一旦开始,就要等待当前 RDB 文件传输完成,才可接收新的请求,设置延迟时间可以让主节点接收更多的请求
# 延迟时间单位:秒,默认 5s,设置为 0,则会立即启动
repl-diskless-sync-delay 5
repl-ping-replica-period
# redis 会周期性向主 redis 发出 ping 包,可以指定周期时间,单位:秒
repl-ping-replica-period 10
repl-timeout
# 主节点 -- 从节点 互连超时时间,"repl-timeout" 要比 "repl-ping-replica-period" 大,不然被检测出主从节点连接超时
repl-timeout 60
repl-disable-tcp-nodelay
# 是否禁止 "tcp nodelay" 参数,默认 no,即 "使用 tcp nodelay"
    # yes:"主节点" 向 "从节点" 传送数据会减少数量和占用更小的网络带宽。会带来数据延迟
    # no:从节点数据延迟不会多,但备份需要的带宽相对较多
# 在数据量传输较大的场景下,建议使用 yes
repl-disable-tcp-nodelay no
repl-backlog-size
# 复制缓冲区,用来保存最新复制的命令。"从节点" 离线时,不需要完全复制 "主节点" 数据,如果可以执行部分同步,只需复制缓冲区中的数据即可。
# 缓冲区越大,从节点离线时间可以越长,复制缓冲区只有在 "从节点" 连接的时候才分配内存,当 "从节点" 断开后一段时间(repl-backlog-ttl)后,缓冲区将被释放。默认 1mb
repl-backlog-size 1mb
repl-backlog-ttl
# 复制缓冲区释放时间,主从节点断开连接设置时间后,释放复制缓冲区。值为 0 时不释放,单位:秒
repl-backlog-ttl 3600
replica-priority
# "从节点" 选举 "主节点" 优先级设置,数值越小、越容易被选举为 "主节点"。设置为 0 则永不被选举为 "主节点",默认 100
replica-priority 100
min-replicas
  • min-replicas-to-write
# redis 提供了可以让 "主节点" 停止写入的方式
min-replicas-to-write 3
  • min-replicas-max-lag
# 延迟小于 min-replicas-max-lag 秒的 "从节点" 才认为是健康的 "从节点"
min-replicas-max-lag 10
replica-announce
  • replica-announce-ip
# 通过检查 "从节点" 与 "主节点" 连接使用的套接字的对等体地址自动检测地址
replica-announce-ip 5.5.5.5
  • replica-announce-port
# 端口在复制握手期间由slavet通信,并且通常是 "slave" 正在使用列出连接的端口
replica-announce-port 1234

SECURITY

requirepass
# 设置 redis 连接密码
requirepass foobared
rename-command CONFIG
# 命令重命名,安全考虑将某些命令重命名,把命令重命名成空字符
rename-command CONFIG ""

CLIENTS

maxclients
# 设置客户端最大并发连接数,设置 0 则表示没有设置
# 当客户端连接数达到限制时,redis 会关闭新的连接并返回错误信息:"max number of clients reached"
maxclients 10000

MEMORY MANAGEMENT

maxmemory
# 指定 redis 最大内存限制,redis 在启动时候会把数据加载到内存中,达到最大内存后,redis 会尝试清除 "已到期" 或 "即将到期" 的 "key",单位:bytes
maxmemory <bytes>
maxmemory-policy
# redis 使用内存达到限制后,遵循的清除策略
    # volatile-lru -- 利用 LRU 算法,清除设置过期时间的 Key
    # allkeys-lru -- 利用 LRU 算法,清除任何 Key
    # volatile-lfu -- 利用 LFU 算法,清除设置过期时间的 Key
    # allkeys-lfu -- 利用 LFU 算法,清除任何 Key
    # volatile-random -- 随机清除设置过期时间
    # allkeys-random -- 随机清除任何 Key
    # volatile-ttl -- 根据设置过期时间,清除即将过期的 Key
    # noeviction -- 不清楚任何 Key,只返回一个写错误
        # 写命令:set setnx setex append incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby getset mset msetnx exec sort
maxmemory-policy noeviction
maxmemory-samples
# LRU 检测的样本数,使用 LRU 或 TTL 淘汰算法,从需要淘汰的列表中随机选择 "maxmemory-samples" 个 Key,选择出闲置时间最长的 Key 进行删除
maxmemory-samples 5
replica-ignore-maxmemory
# 是否开启 replica 最大内存限制
replica-ignore-maxmemory yes

LAZY FREEING

lazyfree
# 以非阻塞方式释放内存
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no

APPEND ONLY MODE

appendonly
# 是否开启 AOF 持久化,yes -- 开启;no -- 不开启
appendonly no
appendfilename
# AOF 持久化文件名称
appendfilename "appendonly.aof"
appendfsync
# AOF 持久化策略
    # no:表示不执行 fsync,通过系统保证数据同步到磁盘(速度最快)
    # always:表示每次写入都执行 fsync,保证数据同步到磁盘(慢、最安全)
    # everysec:每秒执行一次 fsync
appendfsync everysec
no-appendfsync-on-rewrite
# yes:AOF rewrite 期间对新的 "写操作" 不进行 fsync,暂存在 "内存中",等 rewrite 后再写入
# no:可能造成延迟
no-appendfsync-on-rewrite no
auto-aof-rewrite
  • auto-aof-rewrite-percentage
# AOF 自动重写配置,当目前 AOF 文件超过上一次重写的 AOF 文件大小的 "百分之多少" 进行重写
# 即 "当 AOF 增长到一定大小的时候",redis 能够调用 "BGREWRITEAOF" 对日志文件进行重写
# 设置为 100 时,当 AOF 文件大小是上一次日志重写得到 AOF 文件大小的 2倍,则自动进行日志重写
auto-aof-rewrite-percentage 100
  • auto-aof-rewrite-min-size
# 设置允许重写的最小 AOF 文件大小,避免达到了 "auto-aof-rewrite-percentage" 但文件大小任然很小还需要重写
auto-aof-rewrite-min-size 64mb
aof-load-truncated
# yes:当截断的 AOF 文件被导入时,会自动发布一个 log 给客户端然后 load
# no:用户必须手动 redis-check-aof 修复 AOF 文件才可以
aof-load-truncated yes
aof-use-rdb-preamble
# 加载 Redis 时,识别 "以 redis 开头" 的 AOF 文件
aof-use-rdb-preamble yes

LUA SCRIPTING

lua-time-limit
# 如果达到最大时间限制(毫秒),redis 会记个 log,然后返回 error。
lua-time-limit 5000

REDIS CLUSTER

cluster-enabled
# 是否开启集群,默认不开启
cluster-enabled yes
cluster-config-file
# 集群配置文件名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息,文件自动生成
cluster-config-file nodes-6379.conf
cluster-node-timeout
# 集群中节点超时阈值,单位:毫秒
cluster-node-timeout 15000
cluster-replica-validity-factor
# 在进行故障转移的时候,全部slave都会请求申请为master,但是有些slave可能与master断开连接一段时间了,导致数据过于陈旧,这样的slave不应该被提升为master。该参数就是用来判断slave节点与master断线的时间是否过长。

# 判断方法
    # 比较slave断开连接的时间和(node-timeout * slave-validity-factor) + repl-ping-slave-period
    # 如果节点超时时间为三十秒,并且slave-validity-factor为10,假设默认的repl-ping-slave-period是10秒,即如果超过310秒slave将不会尝试进行故障转移。
cluster-replica-validity-factor 10
cluster-migration-barrier
# "主节点" 的 "从节点" 数量大于配置时,"从节点" 才能迁移到其他孤立的 "主节点" 上。
# 如果值为 "2",即一个主节点有 "2个" 可工作的从节点时,他的一个从节点会尝试迁移
cluster-migration-barrier 1
cluster-require-full-coverage
# 集群全部的 slot 有节点负责,集群状态才为ok,才能提供服务。【不建议更改】
cluster-require-full-coverage yes
cluster-replica-no-failover
# ???
cluster-replica-no-failover no

CLUSTER DOCKER/NAT support

cluster-announce
# 集群公告 IP、Port、总线端口

# cluster-announce-ip 10.1.1.5
# cluster-announce-port 6379
# cluster-announce-bus-port 6380

SLOW LOG

slowlog-log-slower-than
# 慢查询时间设置,超过这个时间的查询,则记录。单位:微秒(1000000ms = 1s)
slowlog-log-slower-than 10000
slowlog-max-len
# 慢查询日志长度,当一个新命令被写入日志时,最老的记录会被删除,当内存足够,这个长度就没有限制
# 可以通过 "slowlog reset" 释放内存
slowlog-max-len 128

LATENCY MONITOR

latency-monitor-threshold
# 延迟监控,0 则关闭。用于监控 redis 中执行较慢的操作,用 LATENCY 打印 redis 实例命令耗时图标。通过 "config set" 命令动态设置
latency-monitor-threshold 0

EVENT NOTIFICATION

notify-keyspace-events
# 客户端键空间订阅频道或模式
notify-keyspace-events ""

ADVANCED CONFIG

hash-max-ziplist
  • hash-max-ziplist-entries
# hash 类型的数据结构在编码上可以使用 ziplist 和 hashtable
hash-max-ziplist-entries 512
  • hash-max-ziplist-value
# ziplist 中允许条目 value 值最大字节数,默认 64,建议更改为 1024
hash-max-ziplist-value 64
list-max-ziplist-size
# 当取正值的时候:按照数据项个数来限定每个 quicklist 节点上的 ziplist 长度
# 当取负值的时候:按照占用字节数来限定每个 quicklist 节点上的 ziplist 长度
    # -5: 每个quicklist节点上的ziplist大小不能超过64 Kb。(注:1kb => 1024 bytes)
    # -4: 每个quicklist节点上的ziplist大小不能超过32 Kb。
    # -3: 每个quicklist节点上的ziplist大小不能超过16 Kb。
    # -2: 每个quicklist节点上的ziplist大小不能超过8 Kb。(-2是Redis给出的默认值)
    # -1: 每个quicklist节点上的ziplist大小不能超过4 Kb。
list-max-ziplist-size -2
list-compress-depth
# 参数表示一个 quicklist 两端不被压缩的节点个数
# 节点个数是指 quicklist 双向链表的节点个数,而不是指 ziplist 里面的数据项个数。
    # 0: 是个特殊值,表示都不压缩。这是Redis的默认值。
    # 1: 表示quicklist两端各有1个节点不压缩,中间的节点压缩。
    # 2: 表示quicklist两端各有2个节点不压缩,中间的节点压缩。
    # 3: 表示quicklist两端各有3个节点不压缩,中间的节点压缩。
list-compress-depth 0
set-max-intset-entries
# 数据量小于等于 set-max-intset-entries 用 intset,大于 set-max-intset-entries 用 set。
set-max-intset-entries 512
zset-max-ziplist
# 数据量小于等于 zset-max-ziplist-entries 用 ziplist,大于 zset-max-ziplist-entries 用 zset。
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes
# value大小小于等于hll-sparse-max-bytes使用稀疏数据结构(sparse)
# 大于hll-sparse-max-bytes使用稠密的数据结构(dense),一个比16000大的value是几乎没用的,
# 建议的value大概为3000。如果对CPU要求不高,对空间要求较高的,建议设置到10000左右
hll-sparse-max-bytes 3000
stream-node-max
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing
# yes:Redis 将在每 100毫秒 时使用 1毫秒 的 CPU 时间来对 redis 的 hash表 进行重新 hash,可以降低内存的使用
# no:不进行重新 hash
activerehashing yes
client-output-buffer-limit
# 用来强制关闭传输缓慢的客户端
# 对于 normal client,第一个 0 表示取消 hard limit,第二个 0 和第三个 0 表示取消 soft limit
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
client-query-buffer-limit
# 客户端查询的缓存极限值大小
client-query-buffer-limit 1gb
proto-max-bulk-len
# 在 redis 协议中,批量请求单个字符串限制为 512MB
proto-max-bulk-len 512mb
hz
# redis 执行任务的频率为 1s 除以 hz
hz 10
dynamic-hz
# 启用动态赫兹时,实际配置的赫兹将用作作为基线,但实际配置的赫兹值的倍数
dynamic-hz yes
aof-rewrite-incremental-fsync
# AOF 重写时,开启 "aof-rewrite-incremental-fsync" 后,系统会每 32MB 执行一次 fsync,避免过大的延迟峰值
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync
# RDB 保存时,开启 "rdb-save-incremental-fsync" 后,系统会每 32MB 执行一次 fsync
rdb-save-incremental-fsync yes

ACTIVE DEFRAGMENTATION

activedefrag
# 是否开启活动碎片整理
activedefrag yes
active-defrag-ignore-bytes
# 活动碎片整理最小碎片浪费量
active-defrag-ignore-bytes 100mb
active-defrag-threshold-lower
# 碎片整理最小碎片百分比
active-defrag-threshold-lower 10
active-defrag-threshold-upper
# 碎片整理最大碎片百分比
active-defrag-threshold-upper 100
active-defrag-cycle-min
# CPU 百分比表示碎片整理的最小工作量
active-defrag-cycle-min 5
active-defrag-cycle-max
# CPU 百分比表示碎片整理的最大工作量
active-defrag-cycle-max 75
active-defrag-max-scan-fields
# 处理 set/hash/zset/list 字段的最大数目进行
active-defrag-max-scan-fields 1000

参考

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值