redis配置文件详解

一 包含配置

1.1inlcude 包含其他配置文件

include /path/to/local.conf

 

二 模块配置

2.1loadmodule 加载模块

loadmodule /path/to/my_module.so

 

三 网络配置

3.1bind 从指定的网络接口(网卡)监听连接请求

比如机器上有2块网卡,你只是指定监听一个网卡上来的请求,默认是所有网卡的请求都监听

bind 192.168.1.201

 

3.2protected-mode 是否开启保护模式

保护模式是一层安全保护,以避免Redis在internet上打开的实例被访问和利用。你应该禁用它你确定你想要其他主机的客户连接到Redis,即使没有配置身份验证,也没有特定的接口集。

protected-mode yes

 

3.3port

port 7001

 

3.4tcp-backlog

此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度, 当然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxconn值,默认是511,而Linux的默认参数值是128。当系统并发量大并且客户端速度缓慢的时候,可以将这二个参数一起参考设定。该内核参数默认值一般是128,对于负载很大的服务程序来说大大的不够。一般会将它修改为2048或者更大。在/etc/sysctl.conf中添加:net.core.somaxconn = 2048,然后在终端中执行sysctl -p。

tcp-backlog 511

 

3.5 配置unixsock file的路径和权限

如果redis客户端和服务器在同一台机器,不需要走TCP网络接口监听,使用unix socket 方式那么效果会很明显。

unixsocket /tmp/redis.sock # socket文件路径

unixsocketperm 700 # 权限

 

3.6timeout 在客户端空闲N秒后关闭连接,如果为0,表示禁用

timeout 0

 

3.7tcp-keepalive

如果值非0,单位是秒,表示将周期性的使用SO_KEEPALIVE检测客户端是否还处于健康状态,避免服务器一直阻塞,默认300秒

tcp-keepalive 300

 

四 普通选项

4.1daemonize 是否以后台进程的方式运行redis

daemonize yes

 

4.2supervised

supervised no

 

4.3pidfile 以后台进程方式运行redis,则需要指定pid 文件

pidfile/opt/app/redis/cluster/node-7001/redis_7001.pid

 

4.4loglevel 指定日志级别

loglevel notice | debug | verbose | warning

 

4.5logfile 指定日志文件名称,如果没有是空字符串,表示redis输出到标准输出

logfile /opt/app/redis/cluster/node-7001/redis.log

 

4.6 系统日志

# 是否开启系统日志

syslog-enabled no

 

# 系统日志标识符

syslog-ident redis

 

# 日志的来源、设备

syslog-facility local0

 

4.7databases 数据库的数量,默认使用的数据库是0,可以通过SELECT命令选择一个

databases 16

 

4.8always-show-logo 是否总是显示logo

always-show-logo yes

 

五 快照配置

5.1save 设置redis进行数据库镜像的频率

# 900秒(15分钟)内至少1个key值改变(则进行数据库保存--持久化)

save 900 1

# 300秒(5分钟)内至少10个key值改变(则进行数据库保存--持久化)

save 300 10

# 60秒(1分钟)内至少10000个key值改变(则进行数据库保存--持久化)

save 60 10000

 

5.2stop-writes-on-bgsave-error

持久化出现错误后,是否依然进行继续进行工作

stop-writes-on-bgsave-error yes

 

5.3rdbcompression

使用压缩rdb文件,rdb文件压缩使用LZF压缩算法,yes:压缩,但是需要一些cpu的消耗。no:不压缩,需要更多的磁盘空间

rdbcompression yes

 

5.4rdbchecksum

是否校验rdb文件,更有利于文件的容错性,但是在保存rdb文件的时候,会有大概10%的性能损耗,所以如果你追求高性能,可以关闭该配置。

rdbchecksum yes

 

5.5 dbfilenamerdb文件名称

dbfilename dump.rdb

 

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

dir /opt/app/cluster/node-7001/data

 

六 主从复制配置

 

6.1slaveof 复制选项,slave复制对应的master。

slaveof

 

6.2masterauth

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

masterauth

 

6.3slave-serve-stale-data

当从节点失去连接或者复制正在进行,从节点有2种运行方式:

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

# no: 出去INFO和SLAVEOF命令之外的任何请求都会返回一个错误

 

6.4slave-read-only 从服务器是否只读

slave-read-only yes #不建议设置成no

 

6.5repl-diskless-sync 是否使用socket方式复制数据。

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

有2种方式:

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

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

disk方式的时候,当一个rdb保存的过程中,多个slave都能共享这个rdb文件。socket的方式就的一个个slave顺序复制。在磁盘速度缓慢,网速快的情况下推荐用socket方式。

 

6.6repl-diskless-sync-delay

当使用socket复制数据启用的时候,socket复制的延迟时间,如果设置成0表示禁用,默认值是5。

repl-diskless-sync-delay 5

 

6.7repl-ping-slave-period 从节点根据指定的时间间隔向主节点发起ping请求

repl-ping-slave-period 10 # 默认10秒

 

6.8repl-timeout 复制连接超时时间

需要注意的是repl-timeout需要设置一个比repl-ping-slave-period更大的值,不然会经常检测到超时

repl-timeout 60

 

6.9repl-disable-tcp-nodelay

是否禁止复制tcp链接的tcp nodelay参数,可传递yes或者no。默认是no

即使用tcp nodelay。如果master设置了yes来禁止tcp nodelay设置,在把数据复制给slave的时候,会减少包的数量和更小的网络带宽。但是这也可能带来数据的延迟。默认我们推荐更小的延迟,但是在数据量传输很大的场景下,建议选择yes。

repl-disable-tcp-nodelay no

 

6.10repl-backlog-size 复制缓冲区大小

保存复制的命令。当从节点在一段时间内断开连接时,主节点会收集数据到backlog这个缓冲区,因此当一个从节点想要重新连接时,通常不需要完全的重新同步,但是部分的重新同步就足够了,只是通过在断开连接的时候传递数据的一部分。默认是1mb

repl-backlog-size 1mb

 

6.11repl-backlog-ttl 当主节点不再联系从节点,则释放backlog(内存)

repl-backlog-ttl 3600

 

6.12slave-priority 从节点优先级

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

slave-priority 100

 

6.13min-slaves-to-write

当健康的slave的个数小于N,mater就禁止写入

min-slaves-to-write 3

 

6.14min-slaves-max-lag

延迟小于min-slaves-max-lag秒的slave才认为是健康的slave

min-slaves-max-lag 10

 

七 安全

7.1requirepass 设置密码

requirepass foobared

 

 

八 客户端

8.1maxclients 设置能连上redis的最大客户端连接数量

maxclients 10000

 

九 内存管理

9.1maxmemory redis配置的最大内存容量

maxmemory

 

 

9.2maxmemory-policy 内存达到上限的处理策略

#volatile-lru:利用LRU算法移除设置过过期时间的key。

#volatile-random:随机移除设置过过期时间的key。

#volatile-ttl:移除即将过期的key,根据最近过期时间来删除(辅以TTL)

#allkeys-lru:利用LRU算法移除任何key。

#allkeys-random:随机移除任何key。

#noeviction:不移除任何key,只是返回一个写错误。

maxmemory-policy noeviction

 

十append only模式

10.1appendonly 是否以append only模式作为持久化方式

默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了。但是redis如果中途宕机,会导致可能有几分钟的数据丢失,根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性。Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。

appendonly no

 

10.2appendfilename AOF 文件名称

appendfilename "appendonly.aof"

 

10.3appendfsync aof持久化策略的配置

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

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

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

appendfsync everysec

 

10.4no-appendfsync-on-rewrite

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

no-appendfsync-on-rewrite no

 

10.5auto-aof-rewrite-percentage AOF自动重写配置

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

auto-aof-rewrite-percentage 100

 

10.6auto-aof-rewrite-min-size

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

auto-aof-rewrite-min-size 64mb

 

10.7aof-load-truncated  是否redis在启动时可以加载被截断的AOF文件

aof-load-truncated yes

 

10.8aof-use-rdb-preamble 混合 RDB-AOF 持久化格式

Redis 4.0 新增了 RDB-AOF 混合持久化格式, 这是一个可选的功能, 在开启了这个功能之后, AOF 重写产生的文件将同时包含 RDB 格式的内容和 AOF 格式的内容, 其中 RDB 格式的内容用于记录已有的数据, 而 AOF 格式的内存则用于记录最近发生了变化的数据, 这样 Redis 就可以同时兼有 RDB 持久化和 AOF 持久化的优点 —— 既能够快速地生成重写文件, 也能够在出现问题时, 快速地载入数据。

 

这个功能可以通过aof-use-rdb-preamble 选项进行开启

aof-use-rdb-preamble no

 

 

十一 集群设置

11.1cluster-enabled 集群开关,默认是不开启集群模式。

cluster-enabled yes

 

11.2cluster-config-file,这个文件应该和redis配置文件区别开

集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。

cluster-config-file /opt/app/redis/cluster/node-7001/nodes.conf

11.3cluster-node-timeout 节点相互连接的超时时间

cluster-node-timeout 10000

 

11.4cluster-slave-validity-factor

在进行故障转移的时候,全部slave都会请求申请为master,但是有些slave可能与master断开连接一段时间了,导致数据过于陈旧,这样的slave不应该被提升为master。该参数就是用来判>断slave节点与master断线的时间是否过长。判断方法是:

#比较slave断开连接的时间和(node-timeout *slave-validity-factor) + repl-ping-slave-period

#如果节点超时时间为三十秒, 并且slave-validity-factor为10,假设默认的repl-ping-slave-period是10秒,即如果超过310秒slave将不会尝试进行故障转移

#可能出现由于某主节点失联却没有从节点能顶上的情况,从而导致集群不能正常工作,在这种情况下,只有等到原来的主节点重新回归到集群,集群才恢复运作

#如果设置成0,则无论从节点与主节点失联多久,从节点都会尝试升级成主节

cluster-slave-validity-factor 10

 

11.5cluster-require-full-coverage

当一定比例的键空间没有被覆盖到(就是某一部分的哈希槽没了,有可能是暂时挂了),集群就停止处理任何查询炒作。如果该项设置为no,那么就算请求中只有一部分的键可以被查到,一样可以查询(但是有可能会查不全)

cluster-require-full-coverage yes

 

11.6cluster-migration-barrier

主节点需要的最小从节点数,只有达到这个数,主节点失败时,它从节点才会进行迁移

cluster-migration-barrier 1

 

 

十二 慢日志

12.1slowlog-log-slower-than

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

slowlog-log-slower-than 10000

 

12.2slowlog-max-len 慢查询日志长度

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

slowlog-max-len 128

 

 

十三 延迟监控

13.1latency-monitor-threshold

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

latency-monitor-threshold 0

 

十四 高级配置

14.1hash-max-ziplist-entries

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

hash-max-ziplist-entries 512

 

14.2hash-max-ziplist-value

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

hash-max-ziplist-value 64

 

14.3list-max-ziplist-size

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

list-max-ziplist-size -2

 

 

14.4set-max-intset-entries

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

set-max-intset-entries 512

 

14.5zset-max-ziplist-entries

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

zset-max-ziplist-entries 128

 

14.6zset-max-ziplist-value

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

zset-max-ziplist-value 64

 

14.7hll-sparse-max-bytes

value大小小于等于hll-sparse-max-bytes使用稀疏数据结构(sparse),大于hll-sparse-max-bytes使用稠密的数据结构(dense)

hll-sparse-max-bytes 3000

 

14.8activerehashing rehash的方式是否启用activerhashing

hash table是一种高效的数据结构,被广泛的用在key-value存储中,Redis的dict其实就是一个典型的hash table实现。

rehash是在hash table的大小不能满足需求,造成过多hash碰撞后需要进行的扩容hash table的操作,其实通常的做法确实是建立一个额外的hash table,将原来的hash table中的数据在新的数据中进行重新输入,从而生成新的hash表。redis的 rehash包括了lazy rehashing和active rehashing两种方式

lazy rehashing:在每次对dict进行操作的时候执行一个slot的rehash

active rehashing:每100ms里面使用1ms时间进行rehash。

 

当你的使用场景中,有非常严格的实时性需要,不能够接受Redis时不时的对请求有2毫秒的延迟的话,把这项配置为no。如果没有这么严格的实时性要求,可以设置为yes,以便能够尽可能快的释放内存。

 

activerehashing yes

 

14.9client-output-buffer-limit 参数限制分配的缓冲区的大小,防止内存无节制的分配

 

redis server以单进程的方式处理接收到的请求,而redis完成请求有些工作比较慢,比如网络IO和磁盘IO等比较慢的操作。redis为了提高处理客户端请求的响应时间,做了很多优化。比如网络io和磁盘io是异步完成、使用后台进程完成bgsave和bgrewriteaof工作,在server端为客户提供读buffer等等。

client buffer是在server端实现的一个读取缓冲区。redis server在接收到客户端的请求后,把影响结果写入到client buffer中,而不是直接发送给客户端。server把结果写入到client buffer中后,继续处理客户端的其他请求。这样异步处理方式使redis server不会因为网络原因阻塞其他请求的处理

 

在客户端与server进行的交互中,每个连接都会与一个buffer关联,此buffer用来队列化亟待被client接受的响应信息.如果client不能及时的消费响应信息,那么buffer将会被不断积压而给server带来内存压力.如果buffer中积压的数据达到阀值,将会导致连接被关闭,buffer被移除."

 

客户端类型:

normarl: 普通客户端

slave: 从节点作为客户端

pub/sub: 发布与订阅的客户端

 

缓冲区大小限制类型:

hard limit: 缓冲区大小的硬性限制,即阀值最大值,一旦达到就立刻关闭连接

soft limit: 缓冲去大小的软性限制,即容忍值,它和seconds配合,如果buffer值超过soft且持续时间达到了seconds,也立刻关闭

 

client-output-buffer-limit参数限制分配的缓冲区的大小,防止内存无节制的分配。参数的默认值都为0,意思是不做任何限制。

 

一般的话最好都要设置这个参数:

client buffer实际上是占用redis的数据内存空间,redis的最大数据内存空间由maxmemory参数限定。当数据内存空间达到maxmemory参数限定值时,redis会开始evict数据,或者直接提示客户端OOM(out of memory),这种情况下主要发生在客户端执行大批量数据读取, 比如keys*、smembers、lrange、hgetall等操作。如果单次查询的数据太多,导致redis的used memory增长一倍。

 

但是client-output-buffer-limit也不能设置太小,这个会导致客户端读取不到数据。

client-output-buffer-limit normal 0 0 0

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

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

 

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

默认情况下,“hz”设置为10。当Redis空闲时,提高该值将使用更多的CPU,但同时,当有许多密钥同时到期时,将使Redis响应更灵敏,而超时可以更精确地处理。

hz 10

 

14.11aof-rewrite-incremental-fsync

在AOF重写的时候,如果打开了aof-rewrite-incremental-fsync开关,系统会每32MB执行一次fsync。这对于把文件写入磁盘是有帮助的,可以避免过大的延迟峰值

aof-rewrite-incremental-fsync yes

你可能感兴趣的:(NoSQL数据库/redis)