Redis Client
client-output-buffer-limit normal
- 普通客户端缓冲区限制。默认无限制。
client-output-buffer-limit slave
- 主节点会为每个从节点单独建立一条连接用于命令复制,当主从节点之间网络延迟较高或主节点挂载大量从节点时,这部分内存消耗将占用很大一部分。
- 默认设置 256mb 64mb 60
client-output-buffer-limit pubsub
- 当使用发布订阅功能时,连接客户端使用单独的输出缓冲区,当订阅服务的消息生产快于消费速度时,输出缓冲区会产生积压造成输出缓冲区空间溢出。
- 默认设置 32mb 8mb 60
Redis Server
Redis Basic
bind
- 指定redis server监听的ip,可指定多个,用空格分离。
port
- 指定Redis的端口
- 默认6379
daemonize
-是否以后台守护的方式运行。
- 默认为no,需调整为yes。
loglevel
- 日志记录等级:debug、verbose、notice、warning。默认notice等级,无需调整。
logfile
- 指定日志路径及名称。
timeout
- 在客户端空闲N秒后关闭连接,默认为0,表示不启用。若短连接较多,建议设置为3600。
maxclients
- 最大连接数,默认为10000.
maxmemory
- 内存最大使用限制。
- 当redis的内存使用达到该限制时,redis将根据清除策略来删除key;如果此时redis不能删除key(比如有写操作的阻塞),或者策略被设置为noeviction,redis将会对需要更多内存的命令进行错误响应,但仍然可读。
- 默认不做限制。
- 具体应根据物理内存大小以及单机部署redis实例数量来确定,应保证服务器剩余30~40%内存空间,单实例最大不建议超过20G
maxmemory-policy
- redis的内存使用达到maxmemory的限制时,可以采取的内存清除策略。
allkeys-lfu:使用LFU算法删除所有键(包括未过期的键)
allkeys-lru:根据LRU算法删除键,不管数据有没有设置超时属性, 直到腾出足够空间为止
allkeys-random:随机删除任意键(包括未过期的键)
volatile-random:随机删除过期键
volatile-lru:使用LRU算法删除过期键,直到腾出足够空间为止。如果没有可删除的键对象,回退到noeviction策略
volatile-lfu:使用LFU算法删除过期键
volatile-ttl:根据键值对象的ttl属性,删除最近将要过期数据。如果 没有,回退到noeviction策略
noeviction:默认策略,不会删除任何数据,拒绝所有写入操作并返 回客户端错误信息(error)OOM command not allowed when used memory,此 时Redis只响应读操作。 - 默认为noeviction。
- 缓存业务的场景下,建议设置为allkeys-lru/ volatile-lru/ volatile-lfu/ allkeys-lfu
slowlog-log-slower-than
- 记录超过该值的慢查询的信息,单位是微秒。
- 默认值为10000,建议设置为1000。
slowlog-max-len
- 记录慢日志的队列的长度。
- 默认为128,建议设置为1024。
tcp-backlog
- TCP三次握手后,会将接受的连接放入队列中,tcpbacklog就是队列的大小,它在Redis中的默认值是511,该值会受到操作系统的影响。
- 建议将Linux中somaxconn和tcp_max_syn_backlog的值调高,该参数可设置为65535。echo 2048 > /proc/sys/net/core/somaxconn ,在/etc/sysctl.conf中添加如下,net.core.somaxconn = 2048
tcp-keepalive
- 检测TCP连接活性的周期,默认值为0,也就是不进行检测
- 如果需要设置,建议为60,那么Redis会每隔60秒对它创建的TCP连接进行活性检测,防止大量死连接占用系统资源。
Redis Security
requirepass
- 配置密码,要求任何客户端在发出请求时都需要提供password。(注意:由于redis的运行速度非常快,所以需要设置一个非常强的密码)
masterauth
- 当主库开启上面的参数时,从库连接主库需要通过该参数提供验证信息。
rename-command CONFIG ""
- 将redis的命令重命名为其他字符串,例如将一些删库的危险操作禁用:FLUSHALL、FLUSHDB
Redis RDB
dir
- 工作目录,RDB文件存放在该目录下。
dbfilename
- RDB文件名,不可包含路径。
save
- 在一段时间内发生了一定数量的写操作,则会根据配置触发持久化。默认值如下:
save 900 1
save 300 10
save 60 10000 - 主库建议设置为save "" ,关闭持久化
stop-writes-on-bgsave-error
- 开启该参数,在启用RDB持久化的情况下,如果最新的bgsave失败,redis将会停止接受写操作。
- 默认开启,建议关闭。
rdbcompression
- 是否在生成RDB文件时使用LZF来压缩字符串对象,开启将提高CPU消耗。若关闭可能会导致您的数据集占用内存升高。
- 默认开启。
rdbchecksum
- 在RDB的5版本之后在RDB文件的末尾添加了一个CRC64校验和,这会提高RDB文件的抗损坏性,但是开启该参数会导致RDB在保存和读取的时候使redis的性能受到影响(大约10%);
- 关闭该参数,会在文件末尾将校验和设为0,redis会跳过该项的检测来提高性能。
- 默认开启。
Redis AOF
appendonly
- 是否开启AOF,默认为关闭。建议主节点关闭。
appendfilename
- AOF日志的文件名。
appendfsync
- AOF写入磁盘的方式。
always:每次写操作都会落盘
everysec:每秒一次落盘
no:redis不做控制,由操作系统来控制落盘,一般为30s。 - 默认为everysec,平衡性能与安全性。
aof-use-rdb-preamble
- Redis 4.0后混合持久化设置,当开启混合持久化时,fork出的子进程先将共享的内存副本全量的以RDB方式写入aof文件,然后在将aof_rewrite_buf重写缓冲区的增量命令以AOF方式写入到文件,写入完成后通知主进程更新统计信息,并将新的含有RDB格式和AOF格式的AOF文件替换旧的的AOF文件。
- yes,建议开启混合持久化,即新的AOF文件前半段是RDB格式的全量数据后半段是AOF格式的增量数据
- no,默认,关闭混合持久化
auto-aof-rewrite-percentage
auto-aof-rewrite-min-size
- 自动重写AOF文件。当aof文件增长到指定数值时,redis会自动隐式调用bgrewriteaof来重写aof文件。
- 默认百分比为100;默认大小为64MB
- 建议设置auto-aof-rewrite-min-size为2G。
aof-load-truncated
- 指redis在恢复时,会忽略最后一条可能存在问题的指令。
- 默认值yes。即在aof写入时,可能存在指令写错的问题(突然断电,写了一半),这种情况下,yes会log并继续,而no会直接恢复失败
no-appendfsync-on-rewrite
- 是否在后台写时同步单写,默认值no(表示需要同步).
- 这里的后台写,表示后台正在重写文件(包括bgsave和bgrewriteaof.bgrewriteaof。其实关掉bgsave之后,主要的即是aof重写文件了).
- no 表示新的主进程的set操作会被阻塞掉
- yes 表示新的主进程的set不会被阻塞,待整个后台写完成之后再将这部分set操作同步到aof文件中。但这可能会存在数据丢失的风险(机率很小)
- 如果对性能有要求,可以设置为yes,仅在后台写时会异步处理命令.
Redis Replication
slave-serve-stale-data
- 在从库失去与主库的连接时,从库的动作;
- 如果为yes,从库仍然会响应客户端的请求,即便有些数据可能已经过期,或者该从库第一次连接主库,数据集仍然为为空;
- 如果设置为no,该从库会对客户端的所有请求返回error "SYNC with master in progress",但是INFO和SLAVEOF命令仍然可用。
默认开启。
slave-read-only
- 从库开启只读模式。默认开启。
- 建议开启避免主从数据不一致。
repl-diskless-sync
- 复制同步策略,可设置如下两个值
1.Disk-backed:redis主进程将会新建一个进程将RDB文件写到磁盘上,之后再由redis父进程增量的传送到从库。
2.Diskless:redis主进程创建一个新进程,该进程会直接将RDB通过网络写入从库的socket,不需要接触磁盘。 - 默认为no,即Disk-backed模式,建议使用默认值。
repl-diskless-sync-delay
- 配置Diskless的情况下设置服务器的延迟等待,以便使更多的从库连接到主库进行并行复制(所有连接过来的从库都将共享一个复制缓冲区),一旦开始复制,主库就不在处理其他之后连接过来的从库请求。
- 默认5秒。
repl-disable-tcp-nodelay
- 如果选择“yes”,Redis将使用更少的TCP包和更少的带宽将数据发送给从库;但是这可能会增加从库的延迟,在使用默认配置的Linux内核中,延迟最多可达40毫秒。
- 如果您选择“no”,从库的延迟将会降低,但是更多的带宽将用于复制。
- 默认关闭。
repl-backlog-size
- 设置复制缓冲区的大小。当从库与主库连接断开时,该backlog缓冲区将会存储从库未同步的数据,一遍从库再次连接到主库时不在需要全量同步,只需要部分同步即可。
- 该缓冲区设置的越大,容忍从库断开的时间就越长。
- 该缓冲区会在至少连接了一个从库时才会分配。
- 默认为1M,建议设置为maxmemory的10%以内。
repl-backlog-ttl
- 当redis主库在一段时间N内不再有从库连接,那么将会把backlog释放;该值设置为0表示永不释放backlog。
- 默认值为3600.
slave-prority
- 优先级,哨兵(sentinel)会根据该值选择新主,数值越低,优先级越高。
- 0 表示从库无法被选举为主库
- 1-100,数值越小,更易被选举为主库
- 仅哨兵模式生效,Redis Cluster配置无效
- 默认值 100
min-slaves-to-write N
min-slaves-max-lag M
- 如果连接的从服务器少于N个,延迟小于或等于M秒,那么主服务器就有可能停止接受写操作。
- 这两个参数设置任何一个为0即可禁用该特性。
- 默认不开启该特性。
Redis Cluster
cluster-enabled
- yes 表示以集群模式启动Redis实例
- no 表示以单实例方式启动Redis实例
cluster-config-file
- 指定Redis集群节点每次更新配置参数时持久化的集群配置文件名
- 用户不可编辑、有Redis自动生成、读取和更新
cluster-node-timeout
- 单位 毫秒,默认15000毫秒
- 集群节点超时时间,配合cluster-replica-validity-factor使用
cluster-replica-validity-factor 5
- 探测集群节点超时不可用的次数,假设cluster-node-timeout设置为1000毫秒,cluster-replica-validity-factor为5,那么1000*5之间内集群节点还不可用的话,会被标记为疑似下线
cluster-migration-barrier 1
- 主节点下最少的从节点数
cluster-require-full-coverage
yes 要求所有主节点正常工作,且所有hash slots被分配到工作的主节点,集群才能提供服务,如果想一部分hash slots即可响应请求,则设置为no
默认为yes,表示Redis Cluster集群中某段slot异常不可用时集群拒绝对外提供服务
建议设置为no,避免部分分片异常影响整个集群的使用。
cluster-replica-no-failover no
- yes 禁止当主节点挂掉时,从节点不能竞选为主节点