3.02、redis.conf配置文件

旧时模样 提交于 2020-02-26 16:05:11

# 1、引入其它配置文件。比如说当你有多个server,而有一些配置项是它们公用的,
# 那么你可以将这些公用的配置项写进一个配置文件common.conf里,然后这些server再include这个配置文件
# 这些server自己的配置项则分别写在自己的配置文件里
#
# include /path/to/local.conf

# 2、启动时加载模块,如果server无法加载模块,则此配置会被忽略。可以使用多个loadmodule
#
# loadmodule /path/to/my_module.so

# 3、默认情况下,redis 在 server 上所有有效的网络接口上监听客户端连接。
# 如果只想让它在一个或多个网络接口上监听,那你就绑定一个IP或者多个IP。多个ip空格分隔即可。
#
bind 127.0.0.1

# 4、当开启后,禁止公网访问redis。
# 它启用的条件有两个,第一是没有使用bind,第二是没有设置访问密码
#
protected-mode yes

# 5、指定该redis server监听的端口号。默认是6379,如果指定0则不监听
#
port 6379

# 6、此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度,
#   当然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxconn值,默认是511,而Linux的默认参数值是128
#   当系统并发量大并且客户端速度缓慢的时候,可以将这二个参数一起参考设定
#
tcp-backlog 511

# 7、指定 unix socket 的路径
#
# unixsocket /tmp/redis.sock

# 8、指定 unix socket file 的权限
#
# unixsocketperm 700

# 9、当客户端闲置多少秒后关闭连接,如果设置为0表示关闭该功能
#
timeout 0

# 10、单位是秒,表示将周期性的使用SO_KEEPALIVE检测客户端是否还处于健康状态
#    避免服务器一直阻塞,官方给出的建议值是300s
#
tcp-keepalive 300

# 11、是否以守护模式启动,默认为no
#     配置为yes时以守护模式启动,这时redis instance会将进程号pid写入默认文件/var/run/redis.pid
#
daemonize no

# 12、可以通过upstart和systemd管理Redis守护进程,这个参数是和具体的操作系统相关的
#
supervised no

# 13、配置pid文件路径
#    当redis以守护模式启动时,如果没有配置pidfile,pidfile默认值是/var/run/redis.pid
#
pidfile /var/run/redis_6379.pid

# 14、日志级别
#      可选项有:
#         debug(记录大量日志信息,适用于开发、测试阶段)
#         verbose(较多日志信息)
#         notice(适量日志信息,使用于生产环境)
#         warning(仅有部分重要、关键信息才会被记录)
#
loglevel notice

# 15、日志文件的位置,当指定为空字符串时,为标准输出
#      如果redis已守护进程模式运行,那么日志将会输出到 /dev/null
#
logfile ""

# 16、是否把日志记录到系统日志
#
# syslog-enabled no

# 17、设置系统日志的id
#
# syslog-ident redis

# 18、指定syslog设备(facility),必须是user或则local0到local7
#
# syslog-facility local0

# 19、设置数据库的数目。默认的数据库是DB 0 ,可以在每个连接上使用select命令选择一个不同的数据库
#      dbid是一个介于0到databases - 1 之间的数值
#
databases 16

# 20、是否总是显示redis的logo
#
always-show-logo yes

# 21、保存数据到磁盘
#    格式是:save seconds changes
#     含义是在 seconds 秒之后至少有 changes个keys 发生改变则保存一次
#
save 900 1
save 300 10
save 60 10000

# 22、默认情况下,如果 redis 最后一次的后台保存失败,redis 将停止接受写操作
#      这样以一种强硬的方式让用户知道数据不能正确的持久化到磁盘, 否则就会没人注意到灾难的发生
#      如果后台保存进程重新启动工作了,redis 也将自动的允许写操作
#    要是安装了靠谱的监控,你可能不希望 redis 这样做,那你就改成 no 好了
#
stop-writes-on-bgsave-error yes

# 23、是否在dump .rdb数据库的时候压缩字符串,默认设置为yes
#    如果你想节约一些cpu资源的话,可以把它设置为no,这样的话数据集就可能会比较大
#
rdbcompression yes

# 24、是否CRC64校验rdb文件,会有一定的性能损失(大概10%)
#
rdbchecksum yes

# 25、rdb文件的名字
#
dbfilename dump.rdb

# 26、数据库存放目录。必须是一个目录,aof文件也会保存到该目录下
#
dir ./

# 27、Master-Replica 复制。使用replicaof将一个Redis的实例作为另外Redis服务器的副本。
#      1).Redis复制是异步的, 但是你可以配置一个主服务器来停止接受写操作
#    2).如果复制链接丢失的时间相对较短,Redis副本能够与主服务器执行部分重新同步
#     3).复制是自动的,不需要用户来参与。在网络分区之后,副本自动尝试重新连接到主服务器并与它们重新同步
#
# replicaof <masterip> <masterport>

# 28、当master服务设置了密码保护时,slav服务连接master的密码
#
# masterauth <master-password>

# 29、当副本丢失与主服务器的连接,或者当复制仍在进行时,副本可以以两种不同的方式运行:
#      1).默认值yes,副本仍会响应客户端请求,可能是数据过期,或者如果这是第一次同步,数据集可能只是空的
#     2).设置为no,那么该副本将会对所有类型的命令做出错误的响应,"SYNC with master in progress"
#         但是对INFO、replicaOF、AUTH、PING、SHUTDOWN、 REPLCONF、ROLE、CONFIG、SUBSCRIBE、
#        UNSUBSCRIBE、PSUBSCRIBE、PUNSUBSCRIBE、 PUBLISH、PUBSUB、COMMAND、POST、HOST:和LATENCY进行同步
#
replica-serve-stale-data yes

# 30、配置一个副本实例来接受写操作或者不接受写操作
#     默认:yes
#
replica-read-only yes

# 31、主从数据复制是否使用无硬盘复制功能
#     默认:no
#
repl-diskless-sync no

# 32、当使用无磁盘复制时,可以配置服务器等待的延迟,以便生成通过套接字将RDB传输到副本的子节点
#     延迟单位指定以秒为单位,默认的为5秒。要完全禁用它,只需将它设置为0秒,传输将尽快完成
#
repl-diskless-sync-delay 5

# 33、副本按预先定义好的时间间隔向主服务器发送pings命令
#      默认:10s
#
# repl-ping-replica-period 10

# 34、设置主库批量数据传输时间或者ping回复时间间隔,默认值是60秒
#
# repl-timeout 60

# 35、指定向slave同步数据时,是否禁用socket的NO_DELAY选 项
#     1).若为"yes",则禁用NO_DELAY,则TCP协议栈会合并小包统一发送,
#       这样可以减少主从节点间的包数量并节省带宽,但会增加数据同步到 slave的时间
#      2).默认"no",表明启用NO_DELAY,则TCP协议栈不会延迟小包的发送时机
#         这样数据同步的延时会减少,但需要更大的带宽
#
repl-disable-tcp-nodelay no

# 36、设置主从复制backlog容量大小
# 这个 backlog 是一个用来在 slaves 被断开连接时存放 slave 数据的 buffer
# 所以当一个 slave 想要重新连接,通常不希望全部重新同步,只是部分同步就够了
# 仅仅传递 slave 在断开连接时丢失的这部分数据。这个值越大,salve 可以断开连接的时间就越长
#
# repl-backlog-size 1mb

# 37、配置当master和slave失去联系多少秒之后,清空backlog释放空间。当配置成0时,表示永远不清空
#
# repl-backlog-ttl 3600

# 38、当master不能正常工作的时候,Redis Sentinel 会从 slaves 中选出一个新的master
#    这个值越小,就越会被优先选中
#      但是如果是 0 , 那是意味着这个 slave 不可能被选中。 默认优先级为 100
#
replica-priority 100

# 39、如果连接的副本少于N个,并且延迟小于或等于M秒,则主服务器有可能停止接受写入操作
#      N个副本需要出于在线状态
#    以秒为单位的延迟(必须<=指定值)是根据从副本收到的最后一次ping计算的,通常每秒发送一次
#     此选项不能保证n个副本将接受写入,但会将丢失写入的暴露时间限制在指定的秒数内,以防没有足够的副本可用
#
#    例如,要要求至少3个延迟<=10秒的副本,请使用:
#
# min-replicas-to-write 3
# min-replicas-max-lag 10
#
#      将其中一个或另一个设置为0将禁用该特性
#
#      默认情况下,min- copy -to-write设置为0(禁用特性),min- copy -max-lag设置为10    

# 40、Redis主服务器能够以不同方式列出附加副本的地址和端口
#      当使用端口转发或网络地址转换(NAT)时,副本实际上可以通过不同的IP和端口访问
#      副本可以使用一下两个选项向其主服务器报告一组特定的IP和端口,一遍INFo和ROLE都能报告这些值
#       如果只需要覆盖端口或IP地址,则不需要同时使用这两种选项
#
# replica-announce-ip 5.5.5.5
# replica-announce-port 1234

# 41、redis连接密码
#
# requirepass foobared

# 42、将命令重命名。为了安全考虑,可以将某些重要的、危险的命令重命名
#     当你把某个命令重命名成空字符串的时候就等于取消了这个命令
#
# rename-command CONFIG ""

# 43、设置客户端最大并发连接数,默认无限制
#
# maxclients 10000

# 44、指定Redis最大内存限制
#    Redis在启动时会把数据加载到内存中,达到最大内存后
#    Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,仍然到达最大内存设置
#    将无法再进行写入操作但仍然可以进行读取操作
#    Redis新的vm机制,会把Key存放内存,Value会存放在swap区
#
# maxmemory <bytes>

# 45、最大内存策略
# volatile-lru       -> 使用 LRU 算法移除包含过期设置的 key.
# allkeys-lru     -> 根据 LRU 算法移除所有的 key .
# volatile-lfu    -> 利用LFU算法移除设置过过期时间的key.
# allkeys-lfu     -> 利用LFU算法移除任何key.
# volatile-random -> 移除设置过过期时间的随机key.
# allkeys-random  -> 随机移除所有key.
# volatile-ttl       -> 移除即将过期的key
# noeviction      -> 不移除任何key,只是返回一个写错误,默认选项.
#
# maxmemory-policy noeviction

# 46、设置每次移除时的样本大小
# 默认5个:每次移除时选取5个样本,移除其中符合策略的key
#
# maxmemory-samples 5

# 47、是否从节点忽略maxmemory设置的值
#
# replica-ignore-maxmemory yes

# 48、lazy free可译为惰性删除或延迟释放
#    当删除键的时候,redis提供异步延时释放key内存的功能,把key释放操作放在bio(Background I/O)单独的
#    子线程处理中,减少删除big key对redis主线程的阻塞。有效地避免删除big key带来的性能和可用性问题。
#      redis 4.0 新加了4个参数:
#     1).lazyfree-lazy-eviction   : 是否异步驱逐key,当内存达到上限,分配失败后
#    2).lazyfree-lazy-expire     : 是否异步进行key过期事件的处理
#      3).lazyfree-lazy-server-del : 是否异步进行删除操作,类似unlink
#      4).replica-lazy-flush          : replica client 做全同步的时候,是否异步flush本地db
#

lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no

# 49、是否开启AOF模式
#
appendonly no

# 50、保存数据的AOF文件名称
#
appendfilename "appendonly.aof"

# 51、fsync()调用告诉操作系统将数据真实的写入磁盘而不是放到缓冲区中
#    redis支持3中不同的模式:
#     1).no      :不及时同步,由操作系统控制何时刷写到磁盘上,这个模式速度最快
#      2).always  :每次只写日志,速度较慢,但最安全
#    3).everysec:每秒钟同步一次,折中方案,默认选项
#
appendfsync everysec

# 52、当使用AOF的fsync方案设置为:"always"或"everysec"时,后台的存储进程会执行大量的磁盘I/O操作,
#    在一些Linux架构中,Redis在fsync()调用时可能会阻塞很久。这个问题当前并没有修复,即使是在一个不同的
#    线程执行fsync也将会阻塞我们的同步写调用,为了缓解这个问题,可以使用以下选项,它将会在有一个BGSAVE
#    或BGREWRITEAOF正在运行时,阻止主进程调用fsync().
#    这意味着有另一个子进程在存储时,Redis的持久性等同于“appendfsync none”。
#    在实践中,意味着在最坏的情况下它可能丢失多达30秒的日志(默认的Linux设置)
#
#    如果你有潜在的问题需要更改它为“yes”。否则从持久性的观点来看“no”是最安全的选择
#
no-appendfsync-on-rewrite no

# 53、自动重写append only文件
#    当AOF日志的大小根据指定的百分比增长时,Redis会暗中调用BGREWRITEAOF去自动重写日志文件
#
#    工作原理:Redis记忆AOF文件最后一次重写的大小(如果重启后没有重写发生,AOF的大小在启动时会被使用)。
#    基本大小对比当前大小。如果当前大小比指定的百分比大,触发重写.并且你要为AOF文件指定一个最小的尺寸去重写,
#    这对于避免重写AOF文件是有用的,即使达到了百分比增长率但它仍然是非常小的  
#    指定百分比为0以便禁用自动AOF重写
#
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# 54、当AOF文件在redis启动过程中被截断
#    默认设置yes,当截断的AOF文件被加载时,redis服务器启动发出一个日志告知用户这个事件
#    设置no,服务器会中止一个错误并拒绝启动
#
aof-load-truncated yes

# 55、Redis4.0新增RDB-AOF混合持久化格式,在开启了这个功能之后,AOF重写产生的文件将同时
#    包含RDB格式的内容和AOF格式的内容,其中RDB格式的内容用于记录已有的数据,
#    而AOF格式的内存则用于记录最近发生了变化的数据,这样Redis就可以同时兼有RDB持久化和
#    AOF持久化的优点(既能够快速地生成重写文件,也能够在出现问题时,快速地载入数据)
aof-use-rdb-preamble yes

# 56、Redis提供了lua-time-limit参数限制脚本的最长运行时间
#    默认5秒
#    当脚本运行时间超过这一限制后,Redis将开始接受其他命令但不会执行(以确保脚本的原子性,因为此时脚本并没有被终止),
#    而是会返回“BUSY”错误
lua-time-limit 5000

# 57、是否开启集群
#
# cluster-enabled yes

# 58、集群配置文件
#
# cluster-config-file nodes-6379.conf

# 59、节点互连超时时间,毫秒为单位
#
# cluster-node-timeout 15000

# 60、在进行故障转移的时候全部slave都会请求申请为master,但是有些slave可能与master断开连接一段时间了导致数据过于陈旧,
#    不应该被提升为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

# 61、master的slave数量大于该值,slave才能迁移到其他孤立master上,如这个参数被设为2,
#    那么只有当一个主节点拥有2个可工作的从节点时,它的一个从节点才会尝试迁移
#
# cluster-migration-barrier 1

# 62、集群全部的slot有节点负责,集群状态才为ok并提供服务。设置为no可以在slot没有全部分配的时候提供服务。
#    不建议打开该配置,这样会造成分区的时候,小分区的master一直在接受写请求,而造成很长时间数据不一致
#
# cluster-require-full-coverage yes

# 63、在主节点失效期间,从节点不允许对master失效转移
#
# cluster-replica-no-failover no

# 64、默认情况下,Redis会自动检测自己的IP和从配置中获取绑定的PORT,告诉客户端或者是其他节点。
#    而在Docker环境中,如果使用的不是host网络模式,在容器内部的IP和PORT都是隔离的,
#    那么客户端和其他节点无法通过节点公布的IP和PORT建立连接
#
#    如果开启以下配置,Redis节点会将配置中的这些IP和PORT告知客户端或其他节点。
#    而这些IP和PORT是通过Docker转发到容器内的临时IP和PORT的
#
# cluster-announce-ip 10.1.1.5
# cluster-announce-port 6379
# cluster-announce-bus-port 6380

# 65、执行时间大于slowlog-log-slower-than的才会定义成慢查询,才会被slow-log记录
#    这里的单位是微秒,默认是 10ms
#
slowlog-log-slower-than 10000

# 66、慢查询最大的条数,当slowlog超过设定的最大值后,会将最早的slowlog删除,是个FIFO队列
#
slowlog-max-len 128

# 67、Redis延迟监视子系统在运行时对不同的操作进行采样,以便收集可能导致延时的数据根源
#    通过LATENCY命令,可以打印图表并获取报告
#    系统仅记录在等于或大于 latency-monitor-threshold 指定的毫秒数的时间内执行的操作.
#    当其值设置为0时,将关闭延迟监视器.默认情况下,延迟监视被禁用,因为如果您没有延迟问题,
#    则通常不需要延迟监视,并且收集数据会对性能产生影响,虽然非常小.
#    如果需要,可以使用命令“CONFIG SET latency-monitor-threshold <milliseconds>”在运行时轻松启用延迟监视
#
latency-monitor-threshold 0

# 68、Redis可以向Pub / Sub客户端通知键空间发生的事件。  
#    如果启用了键空间事件通知,并且客户端对存储在数据库0中的键foo执行DEL操作,
#    则将通过Pub / Sub发布两条消息:
# PUBLISH __keyspace@0__:foo del
# PUBLISH __keyevent@0__:del foo
#
#    以 keyspace 为前缀的频道被称为键空间通知(key-space notification),
#    而以 keyevent 为前缀的频道则被称为键事件通知
#
#  K     键空间通知,所有通知以 __keyspace@<db>__ 为前缀.
#  E     键事件通知,所有通知以 __keyevent@<db>__ 为前缀.
#  g     DEL 、 EXPIRE 、 RENAME 等类型无关的通用命令的通知
#  $     字符串命令的通知
#  l     列表命令的通知
#  s     集合命令的通知
#  h     哈希命令的通知
#  z     有序集合命令的通知
#  x     过期事件:每当有过期键被删除时发送
#  e     驱逐(evict)事件:每当有键因为 maxmemory 策略而被删除时发送
#  A     参数 g$lshzxe 的别名
#
#    输入的参数中至少要有一个 K 或者 E , 否则的话, 不管其余的参数是什么, 都不会有任何通知被分发
#    如果只想订阅键空间中和列表相关的通知, 那么参数就应该设为 Kl.
#    将参数设为字符串 "AKE" 表示发送所有类型的通知
#
notify-keyspace-events ""

# 69、hash类型的数据结构在编码上可以使用ziplist和hashtable。
#    ziplist的特点就是文件存储(以及内存存储)所需的空间较小,在内容较小时,性能和hashtable几乎一样
#    因此redis对hash类型默认采取ziplist。如果hash中条目个数或者value长度达到阀值,内部编码将使用hashtable
#    这个参数指的是ziplist中允许存储的最大条目个数,默认为512,建议为128
#    ziplist中允许条目value值最大字节数,默认为64,建议为1024
#
hash-max-ziplist-entries 512
hash-max-ziplist-value 64

# 70、当取正值的时候,表示按照数据项个数来限定每个quicklist节点上的ziplist长度。
# 比如,当这个参数配置成5的时候,表示每个quicklist节点的ziplist最多包含5个数据项
# 当取负值的时候,表示按照占用字节数来限定每个quicklist节点上的ziplist长度。这时,它只能取-1到-5这五个值
# For a fixed maximum size, use -5 through -1, meaning:
# -5: max size: 64 Kb  <-- not recommended for normal workloads
# -4: max size: 32 Kb  <-- not recommended
# -3: max size: 16 Kb  <-- probably not recommended
# -2: max size: 8 Kb   <-- good
# -1: max size: 4 Kb   <-- good
# 性能最高的选项通常为-2(8 Kb大小)或-1(4 Kb大小)。
#
list-max-ziplist-size -2

# 71、一个quicklist两端不被压缩的节点个数
#    参数list-compress-depth的取值含义如下:
#     0: 表示都不压缩。这是Redis的默认值
#     1: 表示quicklist两端各有1个节点不压缩,中间的节点压缩
#     2:表示quicklist两端各有2个节点不压缩,中间的节点压缩
#     3: 表示quicklist两端各有3个节点不压缩,中间的节点压缩
#
list-compress-depth 0

# 72、数据量小于等于512用intset,大于512用set
#
set-max-intset-entries 512

# 73、数据量小于等于zset-max-ziplist-entries用ziplist,大于zset-max-ziplist-entries用zset
#
zset-max-ziplist-entries 128
zset-max-ziplist-value 64

# 74、value大小小于等于hll-sparse-max-bytes使用稀疏数据结构(sparse)
#    大于hll-sparse-max-bytes使用稠密的数据结构(dense),一个比16000大的value是几乎没用的
#    建议的value大概为3000。如果对CPU要求不高,对空间要求较高的,建议设置到10000左右
#
hll-sparse-max-bytes 3000

# 75、stream 的最大内存开销字节数
#
stream-node-max-bytes 4096
#    stream 的最大项数量
#
stream-node-max-entries 100

# 76、指定是否激活重置哈希,默认为开启。对实时性要求高的,可更改为no,不开启
#
activerehashing yes

# 77、客户端的输出缓冲区的限制,可用于强制断开那些因为某种原因从服务器读取数据的速度不够快的客户端
#    (一个常见的原因是一个发布/订阅客户端消费消息的速度无法赶上生产它们的速度)
#    可以对三种不同的客户端设置不同的限制:
#
# normal   -> 正常客户端
# replica  -> slave和 MONITOR 客户端
# pubsub   -> 至少订阅了一个pubsub channel或pattern的客户端
#
#  默认normal客户端不做限制,因为他们在不主动请求时不接收数据(以推的方式),只有异步客户端
#  可能会出现请求数据的速度比它可以读取的速度快的场景
#  pubsub和slave客户端会有一个默认值,因为订阅者和slaves以推的方式来接收数据
#  把硬限制和软限制都设置为0来禁用该功能
#
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

# 78、客户端查询缓存大小限制,如果multi/exec 大可以考虑调节
#
# client-query-buffer-limit 1gb

# 79、批量请求的大小限制
#
# proto-max-bulk-len 512mb

# 80、调节可以让redis再空闲时间更多的做一些任务(如关闭超时客户端等)
hz 10

# 81、当启用动态赫兹时,实际配置的赫兹将用作作为基线,但实际配置的赫兹值的倍数
#    在连接更多客户端后根据需要使用。这样一个闲置的实例将占用很少的CPU时间,而繁忙的实例将反应更灵敏
#
dynamic-hz yes

# 82、在aof重写的时候,如果打开了aof-rewrite-incremental-fsync开关,系统会每32MB执行一次fsync
#    这对于把文件写入磁盘是有帮助的,可以避免过大的延迟峰值
#
aof-rewrite-incremental-fsync yes

# 83、RDB自动触发策略是否启用,默认为yes
#    在rdb保存的时候,如果打开了rdb-save-incremental-fsync开关,系统会每32MB执行一次fsync    
#    这对于把文件写入磁盘是有帮助的,可以避免过大的延迟峰值
#
rdb-save-incremental-fsync yes

# 84、调整计数器的增长速度
# lfu-log-factor 10
# 是一个以分钟为单位的数值,可以调整counter的减少速度
# lfu-decay-time 1

# 85、已启用活动碎片整理
#
# activedefrag yes

# 86、启动活动碎片整理的最小碎片浪费量
#
# active-defrag-ignore-bytes 100mb

# 87、启动活动碎片整理的最小碎片百分比
#
# active-defrag-threshold-lower 10

# 88、我们使用最大努力的最大碎片百分比
#
# active-defrag-threshold-upper 100

# 89、以CPU百分比表示的碎片整理的最小工作量
#
# active-defrag-cycle-min 5

# 90、在CPU的百分比最大的努力和碎片整理
#
# active-defrag-cycle-max 75

# 91、将从中处理的set/hash/zset/list字段的最大数目
# 主词典扫描
#
# active-defrag-max-scan-fields 1000

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!