Redis 配置参数详解

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 禁止当主节点挂掉时,从节点不能竞选为主节点

你可能感兴趣的:(Redis 配置参数详解)