# 指定redis只接收来自于该IP地址的请求,如果不进行设置,那么将处理所有请求,
bind 0.0.0.0
# 保护模式
protected-mode no
#服务端口
port 20003
# 此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度, 当然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxconn值,默认是511,而Linux的默认参数值是128。当系统并发量大并且客户端速度缓慢的时候,可以将这二个参数一起参考设定。 建议修改为 2048
tcp-backlog 511
# 当一个 Redis-client 一直没有请求发向 server 端,那么 server 端有权主动关闭这个连接,可以通过timeout 来设置“空闲超时时限”,0表示永不关闭。
timeout 0
#tcp keepalive参数。如果设置不为0,就使用配置tcp的SO_KEEPALIVE值,使用keepalive有两个好处:检测挂掉的对端。降低中间设备出问题而导致网络看似连接却已经与对端端口的问题。在Linux内核中,设置了keepalive,redis会定时给对端发送ack。检测到对端关闭需要两倍的设置值。
tcp-keepalive 300
#是否在后台执行,yes:后台运行;no:不是后台运行(老版本默认
daemonize yes
# 这个参数表示可以通过upstart和systemd管理Redis守护进程,这个具体和操作系统相关
supervised no
# 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定
pidfile "/var/run/redis_20003.pid"
# 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
loglevel notice
# 日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null
logfile ""
# 设置数据库的数量,默认数据库为0,可以使用SELECT <dbid>命令在连接上指定数据库id
databases 16
# 设置是否显示redis logo图标, 这设置完全是个玩具,没有蛋用
always-show-logo yes
# 表示如果900秒内至少1个key发生变化(新增、修改和删除),则重写rdb文件;
save 900 1
# 表示如果每300秒内至少10个key发生变化(新增、修改和删除),则重写rdb文件;
save 300 10
#表示如果每60秒内至少10000个key发生变化(新增、修改和删除),则重写rdb文件。
save 60 10000
# 规则的设置,该规则决定了当bgsave备份命令执行失败的时候,redis是停止接受客户端发送过来的写命令( yes(默认是开启的) 当最近的一次rdb快照生成失败,redis将不再接受相关的写命令,以此来提醒用户备份的失败;no 最近一次的rdb快照生成失败,仍然接受redis客户端发送过来的写命令,不过需要要靠谱的监控系统提醒我们rdb快照失败了,否则不会有人知道的)
stop-writes-on-bgsave-error yes
#是否在导出.rdb数据库文件的时候采用LZF压缩字符串和对象? 默认情况下总是设置成‘yes’, 他看起来是一把双刃剑。 如果你想在存储的子进程中节省一些CPU就设置成'no', 但是这样如果你的kye/value是可压缩的,你的到处数据接就会很大。
rdbcompression yes
# 是否校验rdb文件, 从rdb格式的第五个版本开始,在rdb文件的末尾会带上CRC64的校验和。这跟有利于文件的容错性,但是在保存rdb文件的时候, 会有大概10%的性能损耗,所以如果你追求高性能,可以关闭该配置。
rdbchecksum yes
# 设置dump文件的名字
dbfilename "dump_20003.rdb"
# 这个配置项一定是个目录,而不能是文件名。
dir "/data/redis"
# 主从复制中,从服务器可以响应客户端请求; 设置成no,主从复制中,从服务器将阻塞所有请求,有客户端请求时返回“SYNC with master in progress”;
replica-serve-stale-data yes
#如果为 yes,代表为只读状态,但并不表示客户端用集群方式以从节点为入口连入集群时,不可以进行 set 操作,且 set 操作的数据不会被放在从节点的槽上,会被放到某主节点的槽上。
replica-read-only yes
# 设置 replicas 节点是否只读,从 Redis 2.6 开始此选项的默认值为 yes。
repl-diskless-sync no
#复制集同步策略:磁盘或者socket 新slave连接或者老slave重新连接时候不能只接收不同,得做一个全同步。需要一个新的RDB文件dump出来,然后从master传到slave。可以有两种情况: 1)基于硬盘(disk-backed):master创建一个新进程dump RDB,完事儿之后由父进程(即主进程)增量传给slaves。 2)基于socket(diskless):master创建一个新进程直接dump RDB到slave的socket,不经过主进程,不经过硬盘。 基于硬盘的话,RDB文件创建后,一旦创建完毕,可以同时服务更多的slave。基于socket的话, 新slave来了后,得排队(如果超出了repl-diskless-sync-delay还没来),完事儿一个再进行下一个。 当用diskless的时候,master等待一个repl-diskless-sync-delay的秒数,如果没slave来的话,就直接传,后来的得排队等了。否则就可以一起传。 disk较慢,并且网络较快的时候,可以用diskless。(默认用disk-based)
repl-diskless-sync-delay 5
# 配置当收到第一个请求时,等待多个slave一起来请求之间的间隔时间
repl-disable-tcp-nodelay no
# 主从节点如果不是部署在同一台机器上,那么复制时就会产生网络延迟问题。Redis 提供了 repl-disable-tcp-nodelay 参数,用于控制与 Linux 的配置选项 TCP_NODELAY
replica-priority 100
#(如果一个master被认为O_DOWN了,而且majority哨兵都允许了主备切换,那么某个哨兵就会执行主备切换操作,此时首先要选举一个slave来会考虑slave的一些信息:
(1)跟master断开连接的时长
(2)slave优先级 (replica-priority越低,优先级就越高)
(3)复制offset
(4)run id
)
lazyfree-lazy-eviction no
# 针对redis内存使用达到maxmeory,并设置有淘汰策略时;在被动淘汰键时,是否采用lazy free机制;
lazyfree-lazy-expire no
# 针对设置有TTL的键,达到过期后,被redis清理删除时是否采用lazy free机制; 此场景建议开启,因TTL本身是自适应调整的速度。
lazyfree-lazy-server-del no
# 针对有些指令在处理已存在的键时,会带有一个隐式的DEL键的操作。如rename命令,当目标键已存在,redis会先删除目标键,如果这些目标键是一个big key,那就会引入阻塞删除的性能问题。 此参数设置就是解决这类问题,建议可开启。
replica-lazy-flush no
#针对slave进行全量数据同步,slave在加载master的RDB文件前,会运行flushall来清理自己的数据场景,
参数设置决定是否采用异常flush机制。如果内存变动不大,建议可开启。可减少全量同步耗时,从而减少主库因输出缓冲区爆涨引起的内存使用增长。
maxclients 10000
# 修改最大连接数配置 ,默认10000
maxmemory 4gb
# 允许用户设置最大使用内存大小 (需要配合maxmemory-policy使用)
appendonly yes
#redis持久化之AOF
appendfilename "appendonly_20003.aof"
# 指定 AOF 文件名
appendfsync everysec
#每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,是受推荐的方式。
no-appendfsync-on-rewrite no
#在日志重写时,不进行命令追加操作,而只是将其放在缓冲区里,避免与命令的追加造成DISK IO上的冲突。
#设置为yes表示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入,默认为no
auto-aof-rewrite-percentage 100
#当前AOF文件大小是上次日志重写得到AOF文件大小的二倍时,自动启动新的日志重写过程。
auto-aof-rewrite-min-size 64mb
#当前AOF文件启动新的日志重写过程的最小值,避免刚刚启动Reids时由于文件尺寸较小导致频繁的重写。
aof-load-truncated yes
#指redis在恢复时,会忽略最后一条可能存在问题的指令。默认值yes。即在aof写入时,可能存在指令写错的问题(突然断电,写了一半),这种情况下,yes会log并继续,而no会直接恢复失败.
aof-use-rdb-preamble yes
#在目前版本中, RDB-AOF 混合持久化功能默认是处于关闭状态的, 为了启用该功能, 用户不仅需要开启 AOF 持久化功能, 还需要将 aof-use-rdb-preamble 选项的值设置为真
lua-time-limit 5000
#为了防止某个脚本执行时间过长导致Redis无法提供服务(比如陷入死循环),Redis提供了lua-time-limit参数限制脚本的最长运行时间,默认为5秒钟。当脚本运行时间超过这一限制后,Redis将开始接受其他命令但不会执行(以确保脚本的原子性,因为此时脚本并没有被终止),而是会返回“BUSY”错误。
slowlog-log-slower-than 10000
#指定执行时间超过多少微秒(1 秒等于 1,000,000 微秒)的命令请求会被记录到日志上。
slowlog-max-len 128
#指定服务器最多保存多少条慢查询日志。
latency-monitor-threshold 0
#延迟监控默认是关闭状态,即使延迟监控处理几乎不耗时。然而,当延迟监控只需非常小的内存时,则没有必要为一个运行良好的Redis实例提高基线内存使用量
notify-keyspace-events ""
#开启键空间通知功能需要消耗一些 CPU , 所以在默认配置下, 该功能处于关闭状态
hash-max-ziplist-entries 512
# 哈希对象保存的键值对数量小于 512 个
hash-max-ziplist-value 64
# 哈希对象保存的所有键值对的键和值的字符串长度都小于 64 字节
list-max-ziplist-size -2
#Redis 的 List 内部是通过 quicklist 实现的(Redis 3.2 开始使用),quicklist 是一个双向链表。 quicklist 的每个节点都是一个 ziplist。list-max-ziplist-size 就是用于配置 quicklist 中的每个节点的 ziplist 的大小。 当这个值配置为正数时表示 quicklist 每个节点的 ziplist 所包含的元素个数是一个确定的数量。 当 list-max-ziplist-size 为负数时表示限制每个 ziplist 的大小
* -5:最大 64 kb <--- 正常环境不推荐
* -4:最大 32 kb <--- 不推荐
* -3:最大 16 kb <--- 可能不推荐
* -2:最大 8 kb <--- 不错
* -1:最大 4kb <--- 不错
list-compress-depth 0
#这个参数表示一个quicklist两端不被压缩的节点个数。
* 0: 是个特殊值,表示都不压缩。这是Redis的默认值。
* 1: 表示quicklist两端各有1个节点不压缩,中间的节点压缩。
* 2: 表示quicklist两端各有2个节点不压缩,中间的节点压缩。
* 3: 表示quicklist两端各有3个节点不压缩,中间的节点压缩。
* 依此类推…
set-max-intset-entries 512
#倘若某个已经被编码的值再经过修改之后超过了配置信息中的最大限制,那么Redis会自动将其转换为正常编码格式,这一操作是非常快速的,但是如果反过来操作,将一个正常编码的较大值转换为特殊编码,Redis的建议是,在正式做之前最好先简单测试一下转换效率,因为这样的转换往往是非常低效的。
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
#类似哈希表和列表,当排序集合的元素个数不超过 zset-max-ziplist-entries 并且每个元素的长度不超过 zset-max-ziplist-value 时,Redis 将使用 ziplist 保存这个排序集合。
hll-sparse-max-bytes 3000
#HyperLogLog 稀疏模式的字节限制,包括了 16 字节的头,默认值为 3000。 当超出这个限制后 HyperLogLog 将有稀疏模式转为稠密模式。
stream-node-max-bytes 4096
stream-node-max-entries 100
#用于设定 Streams 单个节点的最大大小和最多能保存多个个元素。
activerehashing yes
#当启用这个功能后,Redis 对哈希表的 rehash 操作会在每 100 毫秒 CPU 时间中的 1 毫秒进行。 Redis 的哈希表实现的 rehash 策略是一个惰性策略:就是说你对这个哈希表进行越多操作,你将有更多的 rehash 机会, 若你的服务器处于空闲状态则不会有机会完成 rehash 操作,这时哈希表会占用更多内存。 默认情况下会在每一秒中用 10 毫秒来对主哈希表进行 rehash。如果在你的环境中需要有严格的延迟要求,则需要使用将 activerehashing 配置为 no,比如说需要在 2 毫秒内相应查询操作。 否则你应该将这个选项设置诶 yes,这样可以更及时地释放空闲的内存。
client-output-buffer-limit normal 0 0 0
#对于普通客户端来说,限制为0,也就是不限制。因为普通客户端通常采用阻塞式的消息应答模式,何谓阻塞式呢?如:发送请求,等待返回,再发送请求,再等待返回。这种模式下,通常不会导致Redis服务器输出缓冲区的堆积膨胀;
client-output-buffer-limit replica 256mb 64mb 60
#对于slave客户端来说,大小限制是256M,持续性限制是当客户端缓冲区大小持续60秒超过64M,则关闭客户端连接
client-output-buffer-limit pubsub 32mb 8mb 60
#对于Pub/Sub客户端(也就是发布/订阅模式),大小限制是8M,当输出缓冲区超过8M时,会关闭连接。持续性限制是,当客户端缓冲区大小持续60秒超过2M,则关闭客户端连接;
hz 10
# 定时删除,这里的“定期”指的是Redis定期触发的清理策略. 代表每秒钟调用10次后台任务
dynamic-hz yes
#dynamic-hz参数,默认开启动态hz,使得在客户端连接非常多时,自适应调整hz参数,临时增加hz参数,使得每秒钟执行serverCron更多次,占用更多的CPU,每次可以处理一定数量的客户端连接,不至于产生严重超时现象。
aof-rewrite-incremental-fsync yes
#在aof重写的时候,如果打开了aof-rewrite-incremental-fsync开关,系统会每32MB执行一次fsync。这对于把文件写入磁盘是有帮助的,可以避免过大的延迟峰值。
rdb-save-incremental-fsync yes
#如果是REdis-5.0或以上版本,可以设置配置项rdb-save-incremental-fsync值为yes, 以降低save时的影响,但之下的版本不支持rdb-save-incremental-fsync。
requirepass "bzt.com"
#redis访问密码
masterauth "bzt.com"
# 如果master服务器设置有密码则需要配置masterauth参数
# Generated by CONFIG REWRITE
replicaof 172.16.0.179 20003
#通过 replicaof (即以前的 slaveof)选项可以将 Redis 实例设置为其他 Redis 服务端的副本。