1、NETWORK 网络配置详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#============================ NETWORK ============================


#指定redis只能接受来自此IP绑定的网卡的请求,注意此默认值默认外网是不可访问的,想要外网访问redis服务,需注释掉
bind 127.0.0.1


#是否开启保护模式。如果没有指定bind和密码,redis只会本地进行访问,拒绝外部访问。* protected-mode yes
protected-mode yes


#默认端口,建议生产环境不要使用默认端口避免被恶意扫描到
port 6379

#TCP连接中已完成队列(完成三次握手之后)的长度,默认是511,此值必须不大于Linux系统定义的tcp内核参数somaxconn值,默认参数
#值是128,该内核参数默认值一般是128(定义了系统中每一个端口最大的监听队列的长度),对于负载很大的服务程序来说大大的不够。#一般会将它修改为2048或者更大。somaxconn修改方法:
#在/etc/sysctl.conf中添加:net.core.somaxconn = 2048
#然后在终端中执行:sysctl -p

tcp-backlog 511


#设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,服务端会断开连接。为0则服务端不会主动断开连接。
timeout 0


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

1234567891011121314151617181920212223242526272829

2、GENERAL 普通配置详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#============================ GENERAL ============================


#设置为yes表示指定Redis以守护进程的方式启动(后台启动)。默认值为 no
daemonize yes


#不进行监督树的交互
supervised no


#配置PID文件路径,当redis作为守护进程运行的时候,它会把 pid 默认写到 /var/redis/run/redis_6379.pid 文件里面
pidfile /var/run/redis_6379.pid


#定义日志级别。默认使用notice,有4种级别·:
          #1、debug(记录大量日志信息,适用于开发、测试阶段)
          #2、verbose(较多日志信息)
          #3、notice(适量日志信息,使用于生产环境),默认
          #4、warning(仅有部分重要、关键信息才会被记录)
loglevel notice


#配置日志文件地址
logfile ""


#数据库的数量,序号从0开始
databases 16


# 是否总是显示logo
always-show-logo yes

12345678910111213141516171819202122232425262728293031323334

3、SNAPSHOTTING 快照配置详解

Redis作为一款内存数据库,被广泛使用于缓存,分布式锁等场景,假如断电或者因其他因素导致Reids服务宕机,在重启之后数据将会丢失,因此需要数据的持久化。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#============================ SNAPSHOTTING ============================


#save 设置redis进行数据库镜像的频率
# 900秒(15分钟)内至少1个key值改变(则进行数据库保存--持久化)
save 900 1
# 300秒(5分钟)内至少10个key值改变(则进行数据库保存--持久化)
save 300 10
# 60秒(1分钟)内至少10000个key值改变(则进行数据库保存--持久化)
save 60 10000


#在开启了 RDB 快照后,如果最近的一次 RDB 快照在后台生成失败的话,Redis 默认会拒绝所有的写请求。这样以一种强硬的方式让用#户知道数据不能正确的持久化到磁盘,否则就会没人注意到灾难的发生。如果后台保存进程重新启动工作了,redis 也将自动的允许写操#作。如果你已经为你的 Redis 实例和持久化配置了合适的监控手段,你可能不希望 redis 这样做,就改成 no 好了。
stop-writes-on-bgsave-error yes


#在生成 rdb(关系数据库)文件的时候使用 LZF 压缩算法 ,yes:压缩,但是需要一些cpu的消耗。
#no:不压缩,需要更多的磁盘空间
rdbcompression yes


#从 5.0 版本开始 RDB 文件的末尾会默认放置一个 CRC64 的校验码。
#是否校验rdb文件,这会让文件的格式更加容易检验验证,代价是生成和加载 RDB 文件的性能会损失 10% 左右。你可以把该配置关闭以#求更佳的性能。
#没有开启校验码配置的 RDB 文件会将校验码设置为 0,加载该文件的程序就会跳过校验过程。
rdbchecksum yes


# 配置 rdb 文件的名称。默认值为 dump.rdb
dbfilename dump.rdb


#rdb文件是否删除同步锁
rdb-del-sync-files no


#设置快照文件的存放路径,这个配置项一定是个目录,而不能是文件名。使用上面的 dbfilename 作为保存的文件名。
dir ./

1234567891011121314151617181920212223242526272829303132333435363738

4、REPLICATION 主从复制配置详解

1
2
replicaof <masterip> <masterport> #
1

主从复制。使用 replicaof 来让一个 Redis 实例复制另一个 Redis 实例,关于 Redis 复制需要了解的一些事情:

1)Redis 复制时异步进行的,但是可以通过配置让 Redis 主节点拒绝写请求:配置会给定一个值,主节点至少需要和大于该值的从节点个数成功连接。

2)如果 Redis 从节点和主节点意外断连了很少的一段时间,从节点可以向主节点进行增量复制。你可以根据你的需要配置复制的备份日志文件大小(在下一部分可以看到相关的配置)

3)复制会自动进行且不需要人为介入(intervention)。在网络划分后复制会自动与主节点重连且同步数据。

img

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#============================ REPLICATION ============================


#如果主节点配置了密码(使用了 "requirepass" 配置项),从节点需要进行密码认证才能进行复制同步的过程,否则主节点会直接拒
#绝从节点的复制请求。
masterauth <master-password> #


#当复制过程与主节点失去连接,或者当复制正在进行时,复制可以有两种行为模式:
#1)如果 replica-serve-stale-data 设置为 'yes'(默认设置),从节点仍可以处理客户端请求,但该从节点的数据很可能和主
#节点不同步,从节点的数据也可能是空数据集,如果这是与主节点进行的第一次同步。
#2)如果 replica-serve-stale-data 设置成 'no',从节点会对除了 INFO,replicaOF,AUTH,PING,SHUTDOWN,#REPLCONF,ROLE,CONFIG,SUBSCRIBE,UNSUBSCRIBE,PSUBSCRIBE,PUNSUBSCRIBE,PUBLISH,PUBSUB,COMMAND, #POST,HOST: and LATENCY 这些命令之外的请求均返回 "SYNC with master in process"。
replica-serve-stale-data yes


#配置Redis的Slave实例是否接受写操作,即Slave是否为只读Redis。默认值为yes。
replica-read-only yes


#主从数据复制是否使用无硬盘复制功能。默认值为no。
#新建立连接和重连的副本不会根据数据情况进行恢复传输,只会进行全量复制。主节点会传输在从节点之间传输 RDB 文件。传输行为有两种方式:
#1)硬盘备份:Redis 主节点创建一个子进程来向硬盘写 RDB 文件。之后由父进程持续的文件传给副本。在生成 RDB 文件时,多个副本会进行入队并在当前子进程完成 RDB 文件时立即为副本进行 RDB 传输。
#2)不使用硬盘:Redis 主节点建立一个进程直接向副本的网络套接字写 RDB 文件,不涉及到硬盘。一旦传输开始,新来的副本传输请求会入队且只在当前的传输断开后才建立新的传输连接。
repl-diskless-sync no


#如果 diskless sync 是开启的话,就需要配置一个延迟的秒数,这样可以服务更多通过 socket 传输 RDB 文件的副本。延迟配置的单位是秒,默认是 5 秒。不想要该延迟的话可以配置为 0 秒,传输就会立即开始。
repl-diskless-sync-delay 5


#是否使用无磁盘加载,有三项选择:
#disabled:不使用无磁盘加载,先将rdb文件存储到磁盘
#on-empty-db:只有在完全安全的情况下才使用无磁盘加载
#swapdb:解析时在RAM中保留当前db内容的副本,直接从套接字获取数据。
repl-diskless-load disabled


#副本会根据配置好的时间间隔(interval)向主节点发送 PING 命令。可以通过 repl_ping_replica_period 配置修改时间间隔。默认为 10 秒。
repl-ping-replica-period 10 #


#下面的配置会将副本进行超时处理,为了:
#1)在副本的角度,在同步过程中批量进行 I/O 传输。
#2)从副本s的角度,主节点超时了。
#3)从主节点的角度,副本超时了。
#需要重视的一点是确保该选项的配置比 repl-ping-replica-period 配置的值更高,否则每次主从之间的网络比较拥挤时就容易被判定为超时。
repl-timeout 60 #


#同步过后是否在副本套接字上关闭 TCP_NODELAY
#如果你选择了 'yes' ,Redis 会使用很小的 TCP 包,占用很低的带宽来想副本发送数据。但是这么做到达副本的数据会有一些延迟,#使用默认的配置值且是 Linux 内核该延迟最多可能 40 毫秒。
#如果你选择 'no',副本的数据延迟会更低但是占用的带宽会更多一些。
#我们默认会为了低延迟进行优化,但是在比较拥挤网络情况下或者是主节点和副本之间的网络情况比较复杂,比如中间有很多路由跳转的情况下,把选项设置为 'yes' 应该会比较适合。
repl-disable-tcp-nodelay no


#配置副本的缓冲区(backlog)大小。该缓冲区用来在副本断开连接后暂存副本数据。
#这样做的因为但副本重新连接后,不一定要重新进行全量复制,很多时候增量复制同步(仅同步断连期间副本可能丢失的数据)完全足够了。配置的缓冲区越大,副本可以承受的断连时间可以更长。
repl-backlog-size 1mb #


#主节点如果一段时间没有副本连接,上面提到的缓冲区会被释放。可以通过配置一个指定的时间来释放缓冲区
#配置为 0 意味着不释放缓冲区。
repl-backlog-ttl 3600 #


#当主节点无法提供服务后,Redis Sentinel(哨兵)会使用到优先级进行选举副本,晋升为主节点。
#值越低,代表该副本晋升成为主节点的优先级越高,比如说有三个副本,优先级的值分别为 10,100,25,Redis 哨兵会选择最低的那个,即优先级配置为10的那个。
#有一个特殊的配置值:'0',意味着该副本不可能充当主节点的角色,故优先级配置为 0 的副本永远不会被 Redis 哨兵选择晋升。
replica-priority 100


#主节点可以根据目前连接的延迟小于 M 秒的副本数量,主redis就停止接受外来的写请求。
#数量 N 的副本需要是 "online" 的状态。默认的 min-replicas-to-write 被设置为 0(功能关闭)
#延迟的秒数(The lag(落后) in seconds) M ,计算方式是根据上一次副本发送 ping 命令到主节点的时间计算。通常每秒都会发送 ping 命令。
#比如要求至少有三个延迟小等于 10 秒的副本,主redis就停止接受外来的写请求,你可以这么配置:
min-replicas-to-write 3 #
min-replicas-max-lag 10 #


#下面的两个配置选项用来让副本上报特定的 IP 和 端口 集合给它连接的主节点,之后主节点使用 "INFO" 或者 "ROLE" 命令都可以输出这些上报的值。
#如果你只想上报 ip 或 端口其中一个,就没有必要两个都使用。
replica-announce-ip 5.5.5.5 #
replica-announce-port 1234 #

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485

5、KEYS TRACKING 键的追踪配置详解

1
2
3
4
5
6
7
#============================ KEYS TRACKING ============================


#在使用了客户端缓存的时候,这里配置要追踪的key的数量,如果配置为0,则表示要追踪的key的数量不受限制
tracking-table-max-keys 1000000 #

123456

6、SECURITY 安全配置详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#============================ SECURITY ============================


#ACL日志的最大长度,默认是128M。
acllog-max-len 128


#ACL外部配置文件所在位置
aclfile /etc/redis/users.acl


#当前redis服务的访问密码,默认是不需要密码
#警告:因为 Redis 的响应速率很快,所以恶意攻击者可能在每秒中发送 150k 数据量的密码尝试解密。这意味着你设置的密码强度要足够大,否则很容易被破解。
requirepass foobared #


#命令的重命名。
#可以在共享的环境中重命名那些比较危险的命令。比如把 CONFIG 命令重命名成一个不好猜的名字,这样内部的功能还可以使用,且可以避免大部分的客户端使用。
#例如:rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
#甚至可以将命名重命名成一个空串,使其失效。
rename-command CONFIG "" #

12345678910111213141516171819202122

7、CLIENTS 客户端配置详解

1
2
3
4
5
6
7
8
#============================ CLIENTS ============================


#设置可以同时连接客户端的最大数量。默认该项设置为 10000 个客户端
#一旦达到该限制数 Redis 会拒绝所有的新连接并返回错误信息 'max number of clients reached'。
maxclients 10000 #

1234567

8、MEMEORY MANAGEMENT 内存管理配置详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#============================ MEMEORY MANAGEMENT ============================


#指定Redis最大内存限制。达到内存限制时,Redis将尝试删除已到期或即将到期的Key。
maxmemory <bytes> #

#内存使用达到限制后, Redis移除key的策略,默认是noeviction,
#maxmemory-policy 六种策略:
#1、volatile-lru:只对设置了过期时间的key进行LRU(默认值)
#2、allkeys-lru : 删除lru算法的key
#3、volatile-random:随机删除即将过期key
#4、allkeys-random:随机删除
#5、volatile-ttl : 删除即将过期的
#6、noeviction : 永不过期,返回错误
#如果根据淘汰策略,Redis 不能移除键值对,Redis 会拒绝那些申请更大内存的命令,比如 SET,LPUSH 等等,但是仍可以处理读请求,比如 GET 等。
maxmemory-policy noeviction

1234567891011121314151617

9、APPEND ONLY aof模式配置详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#============================ APPEND ONLY MODE ============================

#是否启用aof持久化方式 。即是否在每次更新操作后进行日志记录,默认配置是no
#如果不开启,可能会在断电时导致部分数据丢失。
appendonly no


#aof持久化文件名,默认为appendonly.aof
appendfilename “appendonly.aof”


#aof持久化文件刷新的频率。有三种:
#1.no 依靠OS进行刷新,redis不主动刷新AOF,这样最快,但安全性就差。
#2.always 每提交一个修改命令都调用fsync刷新到AOF文件,非常非常慢,但也非常安全。
#3.everysec 每秒钟都调用fsync刷新到AOF文件,很快,但可能会丢失一秒以内的数据。
appendfsync always #
appendfsync everysec
appendfsync no #

12345678910111213141516171819

参考文章:https://cloud.tencent.com/developer/news/709703