REDIS参数配置

1.参数说明

INCLUDES

include /path/to/local.conf  

## 引入多个配置文件,如果写在主conf 的开头,会被主conf后面的参数覆盖,如果想引入的配置文件覆盖主conf,就把该参数写到末尾

NETWORK

bind 192.168.1.100 10.0.0.1
bind 127.0.0.1 ::1

## bind:绑定redis服务器网卡IP,默认为127.0.0.1,即本地回环地址。这样的话,访问redis服务只能通过本机的客户端连接,而无法通过远程连接。如果bind选项为空的话,那会接受所有来自于可用网络接口的连接

port 6379

## 指定redis运行的端口,默认是6379

timeout 0

## 设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接。默认值为0,表示不关闭

tcp-keepalive

## 单位是秒,表示将周期性的使用SO_KEEPALIVE检测客户端是否还处于健康状态,避免服务器一直阻塞,官方给出的建议值是300s,如果设置为0,则不会周期性的检测

## timeout 是client多久没发命令就关闭该连接,keepalive是定期检查,检查到client没响应再关闭该连接

protected-mode yes

## 是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,拒绝外部访问

tcp-backlog 511

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

daemonize yes

## 是否在后台执行,yes:后台运行;no:不是后台运行

supervised no 

## 可以通过upstart和systemd管理Redis守护进程

pidfile 

## redis的进程文件,当daemonize yes 才会创建进程文件

loglevel

##  指定了服务端日志的级别。级别包括:debug(很多信息,方便开发、测试),verbose(许多有用的信息但是没有debug级别信息多),notice(适当的日志级别,适合生产环境),warn(只有非常重要的信息)

logfile 

## 日志文件的存放目录,当为空的时候直接输出

database 16

## 数据库的数量,默认使用的数据库是0。可以通过”SELECT 【数据库序号】“命令选择一个数据库,序号从0开始

SNAPSHOTTING

##dump RDB的方式有save 和bgsave 下面的内容默认指的是bgsave

## save 是在主进程下执行save操作,因为redis是单线程单进程,所以在执行这个操作的时候会阻塞

## bgsave 是fork一个子进程来执行save操作,所以 Redis 服务器在BGSAVE 执行期间仍然可以继续处理客户端道的请求,但也会阻塞fork的时间

# save ""

save 900 1
save 300 10
save 60 10000

## RDB核心规则配置 save <指定时间间隔> <执行指定次数更新操作>,满足条件就将内存中的数据同步到硬盘中,
## 若不想用RDB方案,可以把 save "" 的注释打开

## redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在fork阶段

stop-writes-on-bgsave-error yes

## 当RDB持久化出现错误后,是否依然进行继续进行工作,yes:不能进行工作,no:可以继续进行工作

rdbcompression yes

## 配置存储至本地数据库时是否压缩数据,默认为yes。Redis采用LZF压缩方式,但占用了一点CPU的时间

rdbchecksum yes

## 是否校验rdb文件;从rdb格式的第五个版本开始,在rdb文件的末尾会带上CRC64的校验和。这跟有利于文件的,容错性,但是在保存rdb文件的时候,可能会有大概10%的性能损耗

dbfilename dump.rdb

#指定本地数据库文件名,一般采用默认的 dump.rdb

dir /usr/local/redis/var

#数据目录,数据库的写入会在这个目录。rdb、aof文件也会写在这个目录

REPLICATION

replicaof <masterip> <masterport>

## 复制选项,slave复制对应的master

masterauth <master-password>

## 如果master设置了requirepass,那么slave要连上master,需要有master的密码才行。masterauth就是用来配置master的密码,这样可以在连上master后进行认证

replica-serve-stale-data yes

## 当从库和主库失去连接或者复制正在进行时

## yes:从库会继续响应客户端的请求

## no: 当有请求来的时候返回一个错误”SYNC with master in progress”

replica-read-only yes

## 作为从服务器,默认情况下是只读的(yes),可以修改成NO,用于写(不建议)

repl-diskless-sync no

## 是否使用socket方式复制数据。目前redis复制提供两种方式,disk和socket如果新的slave连上来或者重连的slave无法部分同步,就会执行全量同步,master会生成rdb文件

## disk方式是master创建一个新的进程把rdb文件保存到磁盘,再把磁盘上的rdb文件传递给slave

## socket是master创建一个新的进程,直接把rdb文件以socket的方式发给slave

## disk方式的时候,当一个rdb保存的过程中,多个slave都能共享这个rdb文件。socket的方式就的一个个slave顺序复制

repl-diskless-sync-delay 5

##diskless复制的延迟时间,防止设置为0。一旦复制开始,节点不会再接收新slave的复制请求直到下一个rdb传输,最好等待一段时间,等更多的slave连上来

repl-ping-slave-period 10

## slave根据指定的时间间隔向服务器发送ping请求

repl-timeout 60

## 复制连接超时时间。master和slave都有超时时间的设置

a) slave角度,如果在repl-timeout时间内没有收到master SYNC传输的rdb snapshot数据,
b) slave角度,在repl-timeout没有收到master发送的数据包或者ping。
c) master角度,在repl-timeout时间没有收到REPCONF ACK确认信息

repl-disable-tcp-nodelay no

## yes: 禁止tcp nodelay设置,在把数据复制给slave的时候,会减少包的数量和更小的网络带宽

## no :  默认我们推荐更小的延迟,但是在数据量传输很大的场景下,建议选择yes

repl-backlog-size 1mb 

## 复制缓冲区大小,这是一个环形复制缓冲区,用来保存最新复制的命令,这样在slave离线的时候,不需要完全复制master的数据,如果可以执行部分同步,只需要把缓冲区的部分数据复制给slave,就能恢复正常复制状态。缓冲区的大小越大,slave离线的时间可以更长,复制缓冲区只有在有slave连接的时候才分配内存,没有slave的时候会被释放

repl-backlog-ttl 3600

## master没有slave一段时间会释放复制缓冲区的内存,repl-backlog-ttl用来设置该时间长度。单位为秒

slave-priority 100

## 当master不可用,Sentinel会根据slave的优先级选举一个master。最低的优先级的slave,当选master,而配置成0,永远不会被选举

min-slaves-to-write 3

## redis提供了可以让master停止写入的方式,如果配置了min-replicas-to-write,健康的slave的个数小于N,mater就禁止写入。master最少得有多少个健康的slave存活才能执行写命令。这个配置虽然不能保证N个slave都一定能接收到master的写操作,但是能避免没有足够健康的slave的时候,master不能写入来避免数据丢失。设置为0是关闭该功能

min-slaves-max-lag 10

## 延迟小于min-replicas-max-lag秒的slave才认为是健康的slave 单位秒 ,1和0都是关闭这个功能

SECURITY

requirepass foobared 

## requirepass配置可以让用户使用AUTH命令来认证密码,才能使用其他命令,使用requirepass的时候需要注意,因为redis太快了,每秒可以认证15w次密码,简单的密码很容易被攻破

rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52

## 把危险的命令给修改成其他名称。比如CONFIG命令可以重命名为一个很难被猜到的命令,这样用户不能使用,内部工具还能接着使用

rename-command CONFIG ""

## 设置成一个空的值,可以禁止一个命令

LAZY FREEING

lazyfree-lazy-eviction no

lazyfree-lazy-expire no

 lazyfree-lazy-server-del no

replica-lazy-flush no

## 以非阻塞方式释放内存

APPEND ONLY MODE

appendonly no

## 默认不开启。它的出现是为了弥补RDB的不足(数据的不一致性),所以它采用日志的形式来记录每个写操作,并追加到文件中。Redis 重启的会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作

## Append Only File是另一种持久化方式,可以提供更好的持久化特性。Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。

 

appendfsync always

## 默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了。但是redis如果中途宕机,会导致可能有几分钟的数据丢失,根据save来策略进行持久化

## 表示每次写入都执行fsync,以保证数据同步到磁盘

appendfilename "appendonly.aof"

## 默认文件名

appendfsync everysec

## 表示每秒执行一次fsync,可能会导致丢失这1s数据

appendfsync no

## 不执行fsync,由操作系统保证数据同步到磁盘,速度最快

## aof 持久化策略的配置

no-appendfsync-on-rewrite no

## 在aof重写或者写入rdb文件的时候,会执行大量IO,此时对于everysec和always的aof模式来说,执行fsync会造成阻塞过长时间,如果对延迟要求很高的应用,这个字段可以设置为yes,否则还是设置为no,这样对持久化特性来说这是更安全的选择,设置为yes表示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入,linux默认fsync策略是30秒。可能丢失30秒数据

auto-aof-rewrite-percentage 10

## aof自动重写配置。当目前aof文件大小超过上一次重写的aof文件大小的百分之多少进行重写,即当aof文件增长到一定大小的时候Redis能够调用bgrewriteaof对日志文件进行重写.当前AOF文件大小是上次日志重写到AOF文件大小的二倍(设置为100)时,自动启动新的日志重写过程

auto-aof-rewrite-min-size 64mb

## 设置允许重写的最小aof文件大小,避免了达到约定百分比但尺寸仍然很小的情况还要重写

aof-load-truncated yes

## aof文件可能在尾部是不完整的,当redis启动的时候,aof文件的数据被载入内存(redis宕机或者异常终止不会造成尾部不完整现象。)

## 如果aof load truncated设置为yes,则加载截断的aof文件,Redis服务器开始发出一个日志来通知用户事件

## 如果将该选项设置为“否”,则服务器将因错误而中止拒绝开始。当选项设置为“否”时,用户需要在重新启动之前使用“redis check AOF”实用程序修复AOF文件

aof-use-rdb-preamble yes

## 加载redis时同时加载RDB文件

LUA SCRIPTING

lua-time-limit 5000

如果达到最大时间限制(毫秒),redis会记个log,然后返回error。当一个脚本超过了最大时限。只有SCRIPT KILL和SHUTDOWN NOSAVE可以用,第一个可以杀没有调write命令的东西。要是已经调用了write,只能用第二个命令杀

REDIS CLUSTER

cluster-enabled yes

## 集群开关,默认不打开集群

cluster-config-file nodes-6379.conf

## 集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。这个文件并不需要手动配置,这个配置文件有Redis生成并更新,每个Redis集群节点需要一个单独的配置文件,请确保与实例运行的系统中配置文件名称不冲突

cluster-node-timeout 15000

## 节点互连超时的阀值。集群节点超时毫秒数

cluster-slave-validity-factor 10
## 在进行故障转移的时候,全部slave都会请求申请为master,但是有些slave可能与master断开连接一段时间了,导致数据过于陈旧,这样的slave不应该被提升为master。该参数就是用来判断slave节点与master断线的时间是否过长,设置为0表示不开启
## (node-timeout * slave-validity-factor) + repl-ping-slave-period,值超过31秒就不使用该slave进行故障迁移
cluster-migration-barrier 1
## master的slave数量大于该值,slave才能迁移到其他孤立master上,如这个参数若被设为2,那么只有当一个主节点拥有2 个可工作的从节点时,它的一个从节点会尝试迁移

cluster-require-full-coverage yes

## 默认情况下,集群全部的slot有节点负责,集群状态才为ok,才能提供服务。设置为no,可以在slot没有全部分配的时候提供服务

CLUSTER DOCKER/NAT support

cluster-announce-ip
cluster-announce-port
cluster-announce-bus-port

##如果配置了以后,Redis节点会将配置中的这些IP和PORT告知客户端或其他节点。而这些IP和PORT是通过Docker转发到容器内的临时IP和PORT的

SLOW LOG

slowlog-log-slower-than 10000

##执行时间比slowlog-log-slower-than大的请求记录到slowlog里面,单位是微秒,所以1000000就是1秒,负数时间会禁用慢查询日志,而0则会强制记录所有命令

slowlog-max-len 128

## 慢查询日志长度。当一个新的命令被写进日志的时候,最老的那个记录会被删掉。这个长度没有限制。只要有足够的内存就行。你可以通过 SLOWLOG RESET 来释放内存

LATENCY MONITOR

latency-monitor-threshold 0

##延迟监控功能是用来监控redis中执行比较缓慢的一些操作,用LATENCY打印redis实例在跑命令时的耗时图表,只记录大于等于下边设置的值的操作。0的话,就是关闭监视,可以通过CONFIG SET命令动态设置

EVENT NOTIFICATION

notify-keyspace-events ""

# K   键空间通知,所有通知以 __ 为前缀
# E   键事件通知,所有通知以 __ 为前缀
# g   DEL 、 EXPIRE 、 RENAME 等类型无关的通用命令的通知
# $   字符串命令的通知
# l    列表命令的通知
# s   集合命令的通知
# h   哈希命令的通知
# z   有序集合命令的通知
# x   过期事件:每当有过期键被删除时发送
# e   驱逐(evict)事件:每当有键因为 maxmemory 政策而被删除时发送
# A   参数 g$lshzxe 的别名

#输入的参数中至少要有一个 K 或者 E,否则的话,不管其余的参数是什么,都不会有任何 通知被分发

ADVANCED CONFIG

hash-max-ziplist-entries 512

## 数据量小于等于hash-max-ziplist-entries的用ziplist,大于hash-max-ziplist-entries用hash

hash-max-ziplist-value 64

## value大小小于等于hash-max-ziplist-value的用ziplist,大于hash-max-ziplist-value用hash

list-max-ziplist-size -2

# -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

list-compress-depth 0

#0:禁用所有列表压缩

#1:深度1表示“在列表中的1个节点之后才开始压缩

#2这里的意思是:不要压缩头部和头部->下一个和尾部->上一个和尾部,但压缩其他节点

set-max-intset-entries 512

##  数据量小于等于set-max-intset-entries用iniset,大于set-max-intset-entries用set

zset-max-ziplist-entries 128

## 数据量小于等于zset-max-ziplist-entries用ziplist,大于zset-max-ziplist-entries用zset

zset-max-ziplist-value 64

## value大小小于等于zset-max-ziplist-value用ziplist,大于zset-max-ziplist-value用zset

hll-sparse-max-bytes 3000

## value大小小于等于hll-sparse-max-bytes使用稀疏数据结构(sparse),大于hll-sparse-max-bytes使用稠密的数据结构(dense),对空间要求较高的,建议设置到10000左右

activerehashing yes

## Redis将在每100毫秒时使用1毫秒的CPU时间来对redis的hash表进行重新hash,可以降低内存的使用,不能够接受Redis时不时的对请求有2毫秒的延迟的话,把这项配置为no。如果没有这么严格的实时性要求,可以设置为yes,以便能够尽可能快的释放内存

client-output-buffer-limit normal 0

## 对于normal client,第一个0表示取消hard limit,第二个0和第三个0表示取消soft limit,normalclient默认取消限制

client-output-buffer-limit replica 256mb 64mb 60

## 对于slave client和MONITER client,如果client-output-buffer一旦超过256mb,又或者超过64mb持续60秒,那么服务器断开客户端连接

client-output-buffer-limit pubsub 32mb 8mb 60

## 对于订阅发布系统,如果client-output-buffer一旦超过32mb,又或者超过8mb持续60秒,那么服务器立刻断开连接

client-query-buffer-limit 1gb

## 这是客户端查询的缓存极限值大小

proto-max-bulk-len 512mb

## 在Redis协议中,批量请求,即表示单个字符串通常限制为512 mb

hz 10 redis执行任务的频率为1s除以hz

## 值越大,请求延迟越小,但CPU使用的越多,通常1~100 ,最大值可以设置到500

aof-rewrite-incremental-fsync yes

## 在aof重写的时候,如果打开了aof-rewrite-incremental-fsync开关,系统会每32MB执行一次fsync

ACTIVE DEFRAGMENTATION

activedefrag yes 

## 开启自动内存碎片整理

active-defrag-ignore-bytes 100mb

## 启动活动碎片整理的最小碎片浪费量

active-defrag-threshold-lower 10

## 启动活动碎片整理的最小碎片百分比

active-defrag-threshold-upper 100

## 启动活动碎片整理的最大碎片百分比

active-defrag-cycle-min 25

## 内存自动整理占用资源最小百分比

active-defrag-cycle-max 75

## 内存自动整理占用资源最大百分比

相关推荐