[root@myhost redis-6.2.6]# egrep -v '#|^$' redis.conf
#=======================密码=======================
#redis访问密码
requirepass "bzt.com"
#如果master服务器设置有密码则需要配置masterauth参数
masterauth "bzt.com"
#=====================================================================
#=======================常规命令=======================
#绑定ip地址,为了安全最好都绑定
bind 127.0.0.1 -::1
#保护模式,如果保护模式开了,而且redis既没有bind ip,也没设置密码,那redis只接收127.0.0.1的连接
protected-mode yes
#端口,设置为0就不会监听
port 6379
#inux 内核tcp_max_syn_backlog和somaxconn 参数调优
tcp-backlog 511
#连接闲置N秒时关闭连接
timeout 0
#开启TCP长连接,如果设置非0,会使用系统的SO_KEEPALIVE间隔发送TCP ACK给客户端,以防连接被弃用。这个很有用:
#检测死掉的连接
#如果网络之间还有其他的网络设备,可以连接保活
#注意,如果想依靠这个机制关闭连接,可能需要两倍的时间,主要取决于kernel的配置
#默认值是300
tcp-keepalive 300
#=====================================================================
#=======================标准配置=======================
#默认情况redis不会按照守护进程的模式去运行
#如果你需要,可以设置来开启 注意,如果开启守护进程模式,会生成/var/run/redis.pid保存pid
daemonize no
#pid文件路径 ,默认值/var/run/redis.pid 如果在非守护进程模式下,而且也没配置pidfile路径,那么不会生成pid文件
#如果是守护进程模式, pidfile总会生成,没配置pidfile就会用默认路径
pidfile /var/run/redis_6379.pid
#指定服务的日志级别:
#debug
#verbose
#notice
#warning
#默认 notice
loglevel notice
#指定redis日志文件名称和路径。你也可以设置logfile ""强制redis将日志输出的标准输出
#注意,如果你使用标准输出,而且redis使用守护进程模式运行,那log日志会被发送给/dev/null,就没了
logfile ""
#使用集群模式时,database就是0
#设置数据库的数量。redis默认的数据库就是0,你可以选择不同的数据库,
#在一个redis连接中执行selcet ,dbid可选的范围是0~(databases-1),默认就是0~15
databases 16
#搞笑配置,永远显示redis的logo
always-show-logo no
#=====================================================================
set-proc-title yes
proc-title-template "{title} {listen-addr} {server-mode}"
#===================开启RDB持久化=======================
#默认情况下,如果RDB快照功能开启而且最后一次rdb快照save失败时,redis会停止接收写请求,
#这其实就是一种强硬的方式来告知用户数据持久化功能不正常,否则没有人会知道当前系统出大问题了。
#如果后台save进程正常工作了(正常保存了rdb文件),那么redis会自动允许写请求。
#不过如果你已经设置了一些监控到redis服务器,你可能想要禁用这个功能,这样redis在磁盘出问题时依旧可以继续处理写请求。只要set stop-writes-on-bgsave-error yes
stop-writes-on-bgsave-error yes
#使用LZF算法对rdb文件进行压缩,如果要节省一些CPU,可以设置为no
rdbcompression yes
#自从redis 5.0,rdb文件的末尾会设置一个CRC64校验码(循环冗余码)
#这可以起到一定的的纠错作用,但是也要 付出10%的性能损失,你可以关闭这个功能来获取最大的性能
#如果rdb文件校验功能关闭,那么系统读取不到检验码时会自动跳过校验
rdbchecksum yes
#rdb文件名
dbfilename dump.rdb
rdb-del-sync-files no
#redis的工作目录 ,aof文件,rdb文件还有redis cluster模式下的node.conf文件均会创建在这个目录下
dir ./
#=====================================================================
#=======================REPLICATION 主从复制=======================
# 设置本机为slave服务,并且填写主节点的ip和端口号
# replicaof <masterip> <masterport>
# master的密码。如果master服务设置了密码保护,slave服务连接master时需要密码。
# masterauth <master-password>
# 当一个slave与master失去联系时,或者复制正在进行的时候,slave应对请求的2种行为:
# 1:如果设置yes(默认值),slave 仍然会应答客户端请求,但返回的数据可能是过时,或者数据可能是空的在第一次同步的时候;
# 2:如果设置no,在你执行除了info和replicaOF和AUTH..等之外的其他命令时,slave返回一个"SYNC with master in progress"的错误。
replica-serve-stale-data yes
#设置slave是否是只读的。从2.6版起,slave默认是只读的
replica-read-only yes
#主从数据复制是否使用无硬盘复制功能。
repl-diskless-sync no
#当五磁盘复制被开启时,等待5s后再开始复制,因为要等更多replica重新连接过来,可以公用一个RDB。如果不延迟等待可以设置为0
repl-diskless-sync-delay 5
repl-diskless-load disabled
# 指定向slave同步数据时,是否禁用socket的NO_DELAY选项。若配置为“yes”,则禁用NO_DELAY,则TCP协议栈会合并小包统一发送,
# 这样可以减少主从节点间的包数量并节省带宽,但会增加数据同步到slave的时间。若配置为“no”,表明启用NO_DELAY,
# 则TCP协议栈不会延迟小包的发送时机,这样数据同步的延时会减少,但需要更大的带宽。则TCP协议栈不会延迟小包的发送时机,
# 这样数据同步的延时会减少,但需要更大的带宽。 通常情况下,应该配置为no以降低同步延时,
# 但在主从节点间网络负载已经很高的情况下,可以配置为yes。
repl-disable-tcp-nodelay no
# 当master不能正常工作的时候,Redis Sentinel会从slaves中选出一个新的 master,这个值越小,
# 就越会被优先选中,但是如果是0,那是意味着这个slave不可能被选中。默认优先级为 100。
replica-priority 100
#=====================================================================
acllog-max-len 128
#=======================LAZY FREEING 阻塞方式释放内存?=======================
# 当使用DEL命令时,会停止执行新的命令,删除key对应的value是个小对象,速度会很快,如果是个大对象,则会阻塞比较长时间。
# 如下配置是否以非阻塞方式释放内存
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
lazyfree-lazy-user-flush no
#=====================================================================
oom-score-adj no
oom-score-adj-values 0 200 800
disable-thp yes
#=======================aof=======================
#默认情况下,redis异步的dump内存镜像到磁盘(RDB)。这个模式虽然已经很不错了,但是如果在发起dump之前机器宕机,就会丢失一些数据。
#AOF(Append only file)是一种可选的持久化策略提供更好数据安全性。使用默认配置的情况下,
#redis最多丢失一秒钟的写入数据,你甚至可以提高级别,让redis最多丢失一次write操作。
#AOF和RDB持久化可以同时开启。如果开了AOF,redis总会先加载AOF的文件,因为AOF提供更高的可用性。
appendonly no
#aof 文件的名称
appendfilename "appendonly.aof"
#对操作系统的fsync()调用告诉操作系统将output buffer中的缓冲数据写入到磁盘。有些操作系统会
#真正的写磁盘,有一些会尽量去写,也可能会等一下。
#redis 支持三种方式:
# no: 不去主动调用fsync(),让操作系统自己决定何时写磁盘
# always:每次write操作之后都调用fsync(),非常慢,但是数据安全性最高。
# everysec:每秒调用一次fsync(),一个折中的策略。
#默认就是everysec,一般也是推荐的策略,平衡了速度和数据安全性。
appendfsync everysec
#当AOF fsync 策略设置成always或者everysec,而且一个后台的save进程(可能RDB的bgsave进程,也可能是
#AOF rewrite进程)正在执行大量磁盘I/O操作,在一些linux配置中,redis可能会对fsync()执行太长的调用。
#这个问题目前没什么办法修复,也就是说就算起一个后台进程去做fsync,如果之前已经有进程再做fsync了,后来的调用
#会被阻塞。
#为了缓和这个问题,可以使用下面的配置,当已经有BGSAVE和BGREWRITEAOF在做fsync()时,就不要再起新进程了。
#如果已经有子进程在做bgsave或者其他的磁盘操作时,redis无法继续写aof文件,等同于appendsync none。
#在实际情况中,这意味着可能会丢失多达30秒的日志。也就是说,这是会丢数据的,如果对数据及其敏感,要注意这个问题。
#如果你有延迟类问题,可以设置成yes,否则设置为no,这样能保证数据的安全性最高,极少丢数据。
no-appendfsync-on-rewrite no
#自动重写aof文件。当aof文件增大到某个百分比时,redis会重写aof文件。
#redis会记住上次rewrite后aof文件的大小(如果启动后还没发生过rewrite,那么会使用aof原始大小)。
#这个size大小会和当前aof文件的size大小做比较。如果当前size大于指定的百分比,就做rewrite。
#并且,还要指定最小的size,如果当前aof文件小于最小size,不会触发rewrite,这是为了防止文件其实很小,但是
#已经符合增长百分比时的多余的rewrite操作。
#如果指定percentage为0代表禁用aof rewrite功能
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
#当Redis启动时会加载AOF文件将数据还原到内存中,但是有时候这个AOF的文件可能被损坏掉了
#,例如文件末尾是坏的。这种情况一般都是由于redis宕机导致的,尤其是使用ext4文件系统挂载
#时没配置 data=ordered选项。
#在这种情况下,redis可以直接报错,或者尽可能的读取剩余可读的AOF文件。
#如果 aof-load-truncated=yes,redis依然会读取这个损坏的aof文件,但是会打出一个报错日志,
#通知用户。
#如果 aof-load-truncated=no,redis就会报错并拒绝启动服务,用户需要使用redis-check-aof工具
#修复aof文件,再启动redis。
#如果redis运行时aof文件崩溃,redis依然会报错并退出。这个选项救不了这种情况。
aof-load-truncated yes
#当redis重写aof文件时,redis可以先读一个rdb来加快重写的速度,当这个选项打开时,重写的aof文件由
#两部分组成:rdb文件+aof文件。
#当redis启动时加载的aof文件以 "REDIS"开头,就会加载rdb文件,然后再读取剩余的AOF文件。
#默认这个选项是关闭的,
aof-use-rdb-preamble yes
#=====================================================================
#=======================LUA脚本=======================
#表示一个lua脚本的最大执行毫秒数。
#如果执行时间达到了最大时间,redis会log这个脚本已经超时了,并且会报个error。
#当一个脚本执行超时,只有SCRIPT KILL和SHUTDOWN NOSAVE命令是可用的。第一个命令可以去
#停止一个不包含写命令的脚本。第二个命令是唯一一个可以停掉超时写命令的脚本。
#将lua-time-limit设置成0或负数表示你不限制执行时间,并且不会有任何警告。
lua-time-limit 5000
#=====================================================================
#=======================SLOW LOG 慢查询日志=======================
#slog log是用来记录redis运行中执行比较慢的命令耗时。
#当命令的执行超过了指定时间,就记录在slow log中,slog log保存在内存中,所以没有IO操作。
#执行时间比slowlog-log-slower-than大的请求记录到slowlog里面,单位是微秒,所以1000000就是1秒。
#注意,负数时间会禁用慢查询日志,而0则会强制记录所有命令。
slowlog-log-slower-than 10000
#慢查询日志长度。当一个新的命令被写进日志的时候,最老的那个记录会被删掉。
#这个长度没有限制。只要有足够的内存就行。你可以通过 SLOWLOG RESET 来释放内存。
slowlog-max-len 128
#=====================================================================
#=======================延迟监控=======================
#延迟监控功能是用来监控redis中执行比较缓慢的一些操作,用LATENCY打印redis实例在跑命令时的耗时图表。
#只记录大于等于下边设置的值的操作。0的话,就是关闭监视。
#默认延迟监控功能是关闭的,如果你需要打开,也可以通过CONFIG SET命令动态设置。
latency-monitor-threshold 0
#=====================================================================
#=======================EVENT NOTIFICATION 订阅通知=======================
#键空间通知使得客户端可以通过订阅频道或模式,来接收那些以某种方式改动了 Redis 数据集的事件。
#因为开启键空间通知功能需要消耗一些 CPU ,所以在默认配置下,该功能处于关闭状态。
#notify-keyspace-events 的参数可以是以下字符的任意组合,它指定了服务器该发送哪些类型的通知:
##K 键空间通知,所有通知以 __keyspace@__ 为前缀
##E 键事件通知,所有通知以 __keyevent@__ 为前缀
##g DEL 、 EXPIRE 、 RENAME 等类型无关的通用命令的通知
##$ 字符串命令的通知
##l 列表命令的通知
##s 集合命令的通知
##h 哈希命令的通知
##z 有序集合命令的通知
##x 过期事件:每当有过期键被删除时发送
##e 驱逐(evict)事件:每当有键因为 maxmemory 政策而被删除时发送
##A 参数 g$lshzxe 的别名
#输入的参数中至少要有一个 K 或者 E,否则的话,不管其余的参数是什么,都不会有任何 通知被分发。
#详细使用可以参考http://redis.io/topics/notifications
notify-keyspace-events ""
#=====================================================================
#=======================ADVANCED CONFIG 高级配置=======================
#数据量小于等于hash-max-ziplist-entries的用ziplist,大于hash-max-ziplist-entries用hash
hash-max-ziplist-entries 512
#value大小小于等于hash-max-ziplist-value的用ziplist,大于hash-max-ziplist-value用hash
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
#数据量小于等于set-max-intset-entries用iniset,大于set-max-intset-entries用set
set-max-intset-entries 512
#数据量小于等于zset-max-ziplist-entries用ziplist,大于zset-max-ziplist-entries用zset
zset-max-ziplist-entries 128
#value大小小于等于zset-max-ziplist-value用ziplist,大于zset-max-ziplist-value用zset
zset-max-ziplist-value 64
#value大小小于等于hll-sparse-max-bytes使用稀疏数据结构(sparse),大于hll-sparse-max-bytes使用稠密的数据结构(dense)。
#一个比16000大的value是几乎没用的,建议的value大概为3000。如果对CPU要求不高,对空间要求较高的,建议设置到10000左右。
hll-sparse-max-bytes 3000
#用于设定 Streams 单个节点的最大大小和最多能保存多个个元素
stream-node-max-bytes 4096
stream-node-max-entries 100
#当启用这个功能后,Redis 对哈希表的 rehash 操作会在每 100 毫秒 CPU 时间中的 1 毫秒进行。
#Redis 的哈希表实现的 rehash 策略是一个惰性策略:就是说你对这个哈希表进行越多操作,
#你将有更多的 rehash 机会, 若你的服务器处于空闲状态则不会有机会完成 rehash 操作,
#这时哈希表会占用更多内存。 默认情况下会在每一秒中用 10 毫秒来对主哈希表进行 rehash。
#如果在你的环境中需要有严格的延迟要求,则需要使用将 activerehashing 配置为 no,
#比如说需要在 2 毫秒内相应查询操作。 否则你应该将这个选项设置诶 yes,这样可以更及时地释放空闲的内存。
activerehashing yes
#对客户端输出缓冲进行限制可以强迫那些不从服务器读取数据的客户端断开连接,用来强制关闭传输缓慢的客户端。
#对于normal client,第一个0表示取消hard limit,第二个0和第三个0表示取消soft limit,normal client默认取消限制,
#因为如果没有寻问,他们是不会接收数据的。
client-output-buffer-limit normal 0 0 0
#对于slave client和MONITER client,如果client-output-buffer一旦超过256mb,
#又或者超过64mb持续60秒,那么服务器就会立即断开客户端连接。
client-output-buffer-limit replica 256mb 64mb 60
##对于pubsub client,如果client-output-buffer一旦超过32mb,又或者超过8mb持续60秒,那么服务器就会立即断开客户端连接
client-output-buffer-limit pubsub 32mb 8mb 60
#redis调用一些内部函数来执行很多后台任务,像关闭超时连接,清理从未请求的过期的key等等。
#不是所有的后台任务都使用相同的频率来执行,redis使用hz参数来决定执行任务的频率。
#默认hz是10.提高这个值会在redis空闲时消耗更多的cpu,但是同时也会让redis更主动的清理过期
#key,而且清理超时连接的操作也会更精确。
#这个值的范围是1~500,不过并不推荐设置大于100的值。多数的用户应该使用默认值,或者最多调高到100。
#redis执行任务的频率为1s除以hz。
hz 10
#dynamic-hz参数,默认开启动态hz,使得在客户端连接非常多时,自适应调整hz参数,
#临时增加hz参数,使得每秒钟执行serverCron更多次,占用更多的CPU,
#每次可以处理一定数量的客户端连接,不至于产生严重超时现象。
dynamic-hz yes
#在aof重写的时候,如果打开了aof-rewrite-incremental-fsync开关,系统会每32MB执行一次fsync。
#这对于把文件写入磁盘是有帮助的,可以避免过大的延迟峰值。
aof-rewrite-incremental-fsync yes
#如果是REdis-5.0或以上版本,可以设置配置项rdb-save-incremental-fsync值为yes,
#以降低save时的影响,但之下的版本不支持rdb-save-incremental-fsync。
rdb-save-incremental-fsync yes
jemalloc-bg-thread yes
#=====================================================================