redis大纲:
本节是介绍 redis.conf 文件的配置, 文章会很长, 需要查询可以用 CTRL + F
详读配置文件 INCLUDES(引用):
################################## INCLUDES(引用) ###################################
# 引入外部配置文件,include 是不能被 config 命令修改的
# 如果引入两个配置文件, 前面会覆盖后面的
# include /path/to/redis-6380.conf
详读配置文件 GENERAL(常用):
################################ GENERAL(常用) #####################################
# 配置守护进程, 默认 no
# 当redis作为守护进程运行的时候,它会写一个 pid 到 /var/run/redis.pid 文件里面。
daemonize yes
# 指定存放redis进程的文件路径
pidfile /var/run/redis.pid
# 服务端口,默认6379,生产环境中建议更改端口号,安全性更高
# 如果你设为0 ,redis 将不在 socket 上监听任何客户端连接。
port 6379
# TCP 监听的最大容纳数量, 决定了三次握手之后的长度, 高并发情况下, 服务端处理很慢可以适当调高
tcp-backlog 128
# 设置监听端口 多个可以用个空格
bind 192.168.146.238 192.168.146.239
# 指定socket监听路径
# unixsocket /tmp/redis.sock
# unixsocketperm 700
# 客户端和服务端的连接超时时间, 默认是0 永不超时。
timeout 0
# tcp 心跳包时间
tcp-keepalive 60
# 配置日志等级, 4个可选值debug,verbose,notice,warning
loglevel notice
# 配置 log 文件地址
logfile "/usr/local/bin/redis.log"
# 是否记录到到日志系统
# syslog-enabled yes
# 设置日志系统的身份
# syslog-ident redis
# 指定日志工具
# syslog-facility local0
# 指定可用的数据库数,默认值为16,默认数据库为0
databases 16
详读配置文件 SNAPSHOTTNG(RDB快照):
################################ SNAPSHOTTING(RDB快照) ################################
# 设置RDB持久化策略
# 在900秒内至少有1个写操作就持久化
save 900 1
# 在300秒内至少有10个写操作就持久化
save 300 10
# 在60秒内至少有10000个写操作就持久化
save 60 10000
# 如果最后一次持久化失败, redis停止处理写操作
# 是否以一种强硬的方式让用户知道数据不能正确的持久化到磁盘
# 默认情况下,如果 redis 最后一次的后台保存失败,redis 将停止接受写操作,
# 如果后台保存进程重新启动工作了,redis 也将自动的允许写操作。
# 如果安装了其他靠谱的监控, 可以改为no
stop-writes-on-bgsave-error yes
# the dataset will likely be bigger if you have compressible values or keys.
# RDB持久化是否将数据压缩
# 默认都设为 yes 使用 LZF 压缩字符串
# 这样会导致子进程cpu占用高, 可以改为no, 但是rdb文件会很大
rdbcompression yes
# 读取和写入的时候是否支持CRC64校验,默认是开启的
rdbchecksum yes
# 快照文件的文件名
dbfilename dump-6379.rdb
# RDB文件放置的路径 默认为 ./
# 路径跟文件名分开配置是因为 redis 备份时,先会将当前数据写入到一个临时文件中
# 等备份完成时,再把该临时文件替换为上面所指定的文件
# 临时文件和备份文件都会放在这个指定的路径当中
dir ./
详读配置文件 REPLICATION(主从复制):
################################# REPLICATION(主从复制) #################################
# 设置主库的ip和端口
# slaveof <masterip> <masterport>
# 设置连接主库的密码
# masterauth <master-password>
# 设置为yes, 当slave和master失去连接后,或者当数据正在复制传输的时候slave可以继续接受客户端的请求
# 设置为no, 除了INFO,SLAVEOF这两个命令外, 其他命令会返回给请求的客户端如下信息“SYNC with master in progress”,
slave-serve-stale-data yes
# 是否让从节点只提供读
slave-read-only yes
# 是否启用内存同步
repl-diskless-sync no
# 设置从节点同步延迟
# 因为同步是通过网络传输rdb文件, 网络可能有延迟或过慢, 所以需要设置延迟, 单位为秒
repl-diskless-sync-delay 5
# 设置从节点发送ping命令到主节点的间隔
# repl-ping-slave-period 10
# 设置主从复制过期时间 一定要比上面的period配置时间长
# repl-timeout 60
# 指定向slave同步数据时,是否禁用socket的NO_DELAY选项。
# yes 则禁用NO_DELAY,则TCP协议栈会合并小包统一发送,这样可以减少主从节点间的包数量并节省带宽,但会增加数据同步到 slave的时间
# no 则表明启用NO_DELAY,则TCP协议栈不会延迟小包的发送时机,这样数据同步的延时会减少,但需要更大的带宽。 通常情况下,应该配置为no以降低同步延时,但在主从节点间网络负载已经很高的情况下,可以配置为yes
repl-disable-tcp-nodelay no
# 设置积压缓冲区容量大小
# repl-backlog-size 1mb
# 清除积压缓冲区的时间, 设为0不清除
# repl-backlog-ttl 3600
# 设置机器的优先级, 用于主机宕机选举机器, 若该配置项为0,则对应的slave永远不会自动提升为master
slave-priority 100
# 如果从机数量小于三个就会拒绝写操作
# min-slaves-to-write 3
# 如果从机延迟 >= 10s救护拒绝写操作
# min-slaves-max-lag 10
详读配置文件 SECURITY(安全):
################################## SECURITY(安全) ###################################
# 设置连接redis密码
# redis速度相当快,一个外部用户在一秒钟进行150K次密码尝试,需指定强大的密码来防止暴力破解
requirepass admin123
# 重命名一些高危命令,用来禁止高危命令, 需要关闭AOF, 否则会出现问题
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command EVAL ""
rename-command SAVE ""
rename-command KEYS ""
详读配置文件 LIMITS(限制):
################################### LIMITS(限制) ####################################
# 限制同时连接的客户数量,默认是10000
# 当连接数超过这个值时,redis 将不再接收其他连接请求,客户端尝试连接时将收到 error 信息
# maxclients 10000
# 设置redis能够使用的最大内存, 达到内存后会根据设置的数据淘汰策略进行数据淘汰
# maxmemory <bytes>
# redis数据淘汰策略
# maxmemory-policy noeviction
# 设置LRU 和 TTL 的精准度, 他俩都是近似算法(减少内存消耗), 越大越精准,但是cpu会更高
# maxmemory-samples 5
详读配置文件 APPEND ONLY MODE(AOF持久化):
############################## APPEND ONLY MODE(AOF持久化)
# 是否开启aof持久化, 会将每一次写操作都追加到aof文件中, redis优先是使用aof的数据恢复状态
appendonly yes
# aof文件名称默认appendonly.aof
appendfilename "appendonly-6379.aof"
# 设置aof持久化策略, 有三种选择always、everysec、no
# always 每次写操作都同步
# everysec 每一秒同步一次
# no 不自动同步, 等操作系统进行数据缓存同步到磁盘
appendfsync everysec
# appendfsync always
# appendfsync no
# 设置同步aof时是否调用fsync(),默认为no,表示要调用fsync(无论后台是否有子进程, 如:bgsave)
# redis在后台写rdb文件或重写aof文件期间会存在大量磁盘IO,此时,fsync可能会阻塞很长时间, 可能会丢失一段时间的日志
# yes不会出现延迟问题(阻塞) no不会出现日志丢失的情况
no-appendfsync-on-rewrite yes
# 指定redis重写aof文件的条件
# 默认为100,表示与上次rewrite的aof文件大小相比,当前aof文件增长量超过上次aof文件大小的100%时,就会触发background rewrite。若配置为0,则会禁用自动rewrite
auto-aof-rewrite-percentage 100
# 指定触发rewrite的aof文件大小
# 如果aof文件小于该值,即使当前文件的增量比例达到auto-aof-rewrite-percentage的配置值,也不会触发自动rewrite。即这两个配置项同时满足时,才会触发rewrite
auto-aof-rewrite-min-size 64mb
# 如果在启动redis加载aof数据到内存的过程中, aof文件末尾被截断(修改)
# 设置为yes redis会加载一个截断的aof文件, 并且发送日志告诉用户
# 设置为no redis会报错并且停止启动, 需要手动使用redis-check-aof来修复这个文件
# 如果aof文件中间被截断(修改), redis会直接报错并且停止启动
aof-load-truncated yes
详读配置文件 LUA SCRIPTING(LUA脚本):
################################ LUA SCRIPTING(LUA脚本) ###############################
# 一个Lua脚本最长的执行时间,单位为毫秒,如果为0或负数表示无限执行时间,默认为5000
lua-time-limit 5000
详读配置文件 REDIS CLUSTER(集群):
################################ REDIS CLUSTER(集群) ###############################
# 设置这个redis实例做为集群的节点
# cluster-enabled yes
# 创建出来集群节点文件的名称
# cluster-config-file nodes-6379.conf
# 节点超时时间(毫秒), 如果超出这个时间会被标记为故障状态
# cluster-node-timeout 15000
# 当主机挂掉, 避免让数据太旧的从服务器进行故障转移
# 这个值是设置故障转移时, 从机与主机同步数据的最大的间隔
# 如果从机上次与主机同步时间大于这个值, 那么这台从机不会提升成主机
# 0是惟一一个能够保证在所有分区恢复时集群始终能够继续运行的值
# cluster-slave-validity-factor 10
# 如果需要进行失败转移, 判断存活的从节点是否大于等于这个值, 大于等于才会进行失败转移
# 默认1, 当主机故障, 至少有一个从节点在工作才会进行失败转移, 否则集群不可用
# 如果要禁用失败转移可以将它设置为很大的值, 可以改为0, 但是会很危险
# cluster-migration-barrier 1
# 默认情况下(yes), redis如果有槽丢失, 会导致集群不可用
# 如果想让在槽丢失的情况下(节点挂掉)保证部分可用, 可以设置为no
# cluster-require-full-coverage yes
详读配置文件 SLOW LOG(慢日志):
################################## SLOW LOG(慢日志) ###################################
# 如果命令响应时间(不包括I/O操作)超过了设置的时间(微秒), 则会记录到慢日志
# 负数禁用慢日志, 0记录每一条
slowlog-log-slower-than 10000
# 设置慢日志的长度, 当长度上限时, 会从对列中删除最早的命令
# 这个长度没有限制, 需要注意内存的消耗, 可以通过慢日志的重置来回收内存
slowlog-max-len 128
详读配置文件 LATENCY MONITOR(延迟监控):
################################ LATENCY MONITOR(延迟监控) ##############################
# 记录大于等于指定的时间(毫秒)内执行的操作, 设置为0则不会开启延迟监控
# 延迟监控默认不开启, 因为延迟而且对性能有影响(虽然很小), 可以在负载较大的情况下测量
# 可以在运行时使用 CONFIG SET lat-monitor-threshold 命令启用延迟监控
# 通过LATENCY 命令可以打印监控的图形报告
latency-monitor-threshold 0
详读配置文件 EVENT NOTIFICATION(事件通知):
############################# EVENT NOTIFICATION(事件通知) ##############################
# redis 具有订阅/发布模式
#
# 举例:
# 发布 到keyevent 在0数据库的 del foo操作
# PUBLISH __keyevent@0__:del foo
#
# 通知标识符:
# K Keyspace events, published with __keyspace@<db>__ prefix.
# E Keyevent events, published with __keyevent@<db>__ prefix.
# g Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ...
# $ String commands
# l List commands
# s Set commands
# h Hash commands
# z ZSet commands
# x Expired events (events generated every time a key expires)
# e Evicted events (events generated when a key is evicted for maxmemory)
# A Alias for g$lshzxe, so that the "AKE" string means all the events.
#
# 默认情况下是禁用的, 因为不是很需要并且占用内存
# 如果没有指定至少一个K或E,则不会交付任何事件
notify-keyspace-events ""
详读配置文件 ADVANCED CONFIG(高级配置):
############################### ADVANCED CONFIG(高级配置) ###############################
# 如果hash中的条数小于512并且每条的字节小于64位则会使用ziplist存储hash, 否则使用hashtable
# 设置使用ziplist的hash条数的阀值
hash-max-ziplist-entries 512
# 设置使用ziplist的条目字节的阀值
hash-max-ziplist-value 64
# 设置list使用ziplist的阀值
# -5: max size: 64 Kb <-- 不建议用于正常工作负载
# -4: max size: 32 Kb <-- 不建议使用
# -3: max size: 16 Kb <-- 不是很推荐使用
# -2: max size: 8 Kb <-- 推荐使用
# -1: max size: 4 Kb <-- 推荐使用
# -2, -1 性能最好, 正数表示元素精确到_exactly_
list-max-ziplist-size -2
# 设置list的quickList的默认压缩深度
list-compress-depth 0
# 设置zset使用ziplist的阀值
# 设置使用ziplist的zset条数的阀值
zset-max-ziplist-entries 128
# 设置使用ziplist的条目字节的阀值
zset-max-ziplist-value 64
#设置稀疏编码 HyperLogLog 字节限制
hll-sparse-max-bytes 3000
# 是否开启活跃重新哈希
# yes会尽快释放内存
# no一般用于有延迟是情况下
activerehashing yes
# 设置客户端缓冲区限流
#
# normal -> 正常客户端和监控端
# slave -> 从节点服务端
# pubsub -> 订阅发布客户端
#
# 格式:
# client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>
#
# 通过将它们设置为零,可以禁用硬限制或软限制
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
# 设置redis任务执行频率, 默认10, 范围在1~500之间, 设置越大cpu占用就会越高
hz 10
# 当一个子进程重写AOF文件时,如果设置为true,那么该文件将每生成32MB的数据进行一次fsync
# 这对于更增量地将文件提交到磁盘并避免较大的延迟峰值非常有用。
aof-rewrite-incremental-fsync yes
# no知道
# lfu-log-factor 10
# lfu-decay-time 1
详读配置文件 ACTIVE DEFRAGMENTATION(内存碎片管理):
########################### ACTIVE DEFRAGMENTATION(内存碎片管理) #######################
# 注意: 试验性功能!!
# 1. 默认情况下禁用此功能,并且只有在编译redis时才能工作, 使用Jemalloc的内存分配器
# 2. 如果没有碎片,则永远不需要启用此功能
# 3. 一旦经历了碎片化,就知道可以在什么时候启用该特性(启动命令: CONFIG SET activedefrag yes)
# 什么是主动碎片整理?
# Active (online)碎片整理允许Redis服务器压缩, 内存中数据的小分配和重分配之间的剩余空间,从而允许回收内存
# 整理活跃的碎片
# activedefrag yes
# 启动主动碎片整理的最小碎片浪费量
# active-defrag-ignore-bytes 100mb
# 启动主动碎片整理的最小碎片百分比
# active-defrag-threshold-lower 10
# 使用最大活跃碎片的最大百分比
# active-defrag-threshold-upper 100
# 整理最大活跃碎片使用CPU的小的百分百
# active-defrag-cycle-min 25
# 整理最大活跃碎片使用CPU的最大的百分百
# active-defrag-cycle-max 75
结束
这就是我对redis配置篇的总结, 感觉有用就点个赞吧 如果有错误或更好的方法评论区请多多指出 相互学习共同进步