Redis配置详解

Redis配置文件名

Redis 的配置文件为 redis.conf,按照种类区别,Redis 的配置可以分为:引入其他配置文件配置、通用配置、主从配置、安全配置、资源使用配置、使用 LUA 脚本、持久化配置、集群配置和慢查询配置。

Redis配置详解

Redis配置文件引入

配置 说明
include /path/to/local.conf 1. 如果你有一个可用于所有的 redis server 的标准配置模板,但针对某些 server 又需要一些个性化的设置,可以使用 include 来包含一些其他的配置文件。
2. 注意,include 是不能被 config rewrite 命令改写的。

Redis常用配置

配置 说明
daemonize no 1. 配置 redis server 是否以守护进程的方式启动。
2. no:不以守护进程启动。
3. yes:以守护进程启动。
pidfile “/var/run/redis/redis-server.pid” 当 Redis 以守护进程方式启动时,会在该文件里面写入 redis 的进程 id。
port 6379 设置 redis server 启动的端口,默认为 6379。
tcp-backlog 511 1. TCP 监听的最大容纳数量。
2. 在高并发的环境下,需要把这个值调高以避免客户端连接缓慢的问题。
3. 如果该值大于 Linux 内核的值,则 Linux 内核会把这个值缩小成 /proc/sys/net/core/somaxconn 对应的值, 此时要同时修改这两个值才能生效。
bind 192.168.98.70 默认情况下,Redis 会监听所有 IP 的客户端连接。 如果只想让它在一个网络接口上监听,那你就绑定一个 IP 或者多个 IP。
unixsocket /var/run/redis/redis.sock 指定 unix socket 的路径。
unixsocketperm 700 指定 unix socket 文件的权限。
timeout 0 指定在一个 client 链接空闲多少秒之后关闭连接,0 就是不关闭。
tcp-keepalive 0 TCP 心跳包。 如果设置为非零,则在与客户端缺乏通讯的时候使用 SO_KEEPALIVE 发送 tcp acks 给客户端。
loglevel notice 定义日志级别。
logfile “/var/log/redis/redis-server.log” 定义日志文件的位置。
syslog-enabled no 是否将日志记录到系统日志,no:不记录, yes:记录。
syslog-ident redis 设置系统日志的 identity,即系统日志的唯一标志。
syslog-facility local0 设置 syslog 的 facility,必须是 USER 或者是 LOCAL0-LOCAL7 之间的值。
databases 16 1. 设置数据库的数目。
2. 默认数据库是 DB 0,你可以在每个连接上使用 select dbid 命令选择一个不同的数据库, 但是 dbid 必须是一个介于 0 到 databasees - 1 之间的值。
save 900 1 1. 根据给定的时间间隔和写入次数将数据保存到磁盘。
2. 900 秒内如果至少有 1 个 key 的值变化,则保存。
save 300 10 300 秒内如果至少有 10 个 key 的值变化,则保存。
save 60 10000 60 秒内如果至少有 10000 个 key 的值变化,则保存。
save “” 你可以注释掉所有的 save 行来停用保存功能。 也可以直接一个空字符串来实现停用。
stop-writes-on-bgsave-error yes 1. 默认情况下,如果 Redis 最后一次的后台保存失败,Redis 将停止接受写操作, 这样以一种强硬的方式让用户知道数据不能正确的持久化到磁盘,否则就会没人注意到灾难的发生。
2. 如果后台保存进程重新启动工作了,Redis 也将自动的允许写操作。
3. 然而你要是安装了靠谱的监控,你可能不希望 Redis 这样做,那你就改成 no 好了。
rdbcompression yes 1. 是否在 dump .rdb 数据库的时候使用 LZF 压缩字符串。默认都设为 yes 。
2. 如果你希望保存子进程节省点 cpu ,你就设置它为 no , 不过这个数据集可能就会比较大。
rdbchecksum yes 是否校验 rdb 文件。
dbfilename dump.rdb 设置 dump 的文件位置。
dir ./ 1. 工作目录。上面的 dbfilename 只指定了文件名,但是它会写入到这个目录下。
2. 这个配置项一定是个目录,而不能是文件名。

Redis主从配置

配置 说明
slaveof 1. 主从复制。
2. 使用 slaveof 来让一个 Redis 实例成为另一个 Reids 实例的副本。
3. 注意这个只需要在 slave 上配置。
masterauth master-password 如果 master 需要密码认证,就在这里设置。
slave-serve-stale-data yes 1. 当一个 slave 与 master 失去联系,或者复制正在进行的时候, slave 可能会有两种表现:
2. 如果为 yes ,slave 仍然会应答客户端请求,但返回的数据可能是过时,或者数据可能是空的在第一次同步的时候 。
3. 如果为 no ,在你执行除了 info he salveof 之外的其他命令时, slave 都将返回一个 SYNC with master in progress 的错误。
slave-read-only yes 1. 你可以配置一个 slave 实体是否接受写入操作。
2. 通过写入操作来存储一些短暂的数据对于一个 slave 实例来说可能是有用的, 因为相对从 master 重新同步数而言,据数据写入到 slave 会更容易被删除。
3. 但是如果客户端因为一个错误的配置写入,也可能会导致一些问题。从 redis 2.6 版起,默认 slaves 都是只读的。
repl-ping-slave-period 10 Slaves 在一个预定义的时间间隔内发送 ping 命令到 server 。 默认为 10 秒。
repl-timeout 60 设置主从复制过期时间。这个值一定要比 repl-ping-slave-period 大。
repl-disable-tcp-nodelay no 禁用还是启用 TCP_NODELAY 的选项。
repl-backlog-size 1mb 1. 设置主从复制容量大小。
2. 这个 backlog 是一个用来在 slaves 被断开连接时,存放 slave 数据的 buffer,所以当一个 slave 想要重新连接,通常不希望全部重新同步, 只是部分同步就够了,仅仅传递 slave 在断开连接时丢失的这部分数据。这个值越大,salve 可以断开连接的时间就越长。
repl-backlog-ttl 3600 在某些时候,master 不再连接 slaves,backlog 将被释放。如果设置为 0,意味着绝不释放 backlog 。
slave-priority 100 1. 当 master 不能正常工作的时候,Redis Sentinel 会从 slaves 中选出一个新的 master, 这个值越小,就越会被优先选中,但是如果是 0 , 那是意味着这个 slave 不可能被选中。
2. 默认优先级为 100。
min-slaves-to-write 3 如果少于 3 个 slave 存活,那么 master 就停止写入操作。
min-slaves-max-lag 10 三个从服务器的延迟(lag)值都大于或等于 10 秒时,主服务器将拒绝执行写命令。

Redis安全配置

配置 说明
requirepass foobared 设置认证密码。如果设置了密码,那么 client 在操作之前必须要使用 AUTH 命令进行认证。
rename-command CMD1 CMD2 将 CMD1 重命名为 CMD2。这里的作用可以将一些危险的命令重命名为一个新的CMD。
rename-command CONFIG “” 如果想禁用某些配置,则可以使用此选项。

Redis资源使用配置

配置 说明
maxclients 10000 连接数一旦达到最大限制,Redis 将关闭所有的新连接,并发送一个 max number of clients reached 的错误。
maxmemory 最大使用内存。
volatile-lru 最大内存策略,使用 LRU 算法移除包含过期设置的 key 。
allkeys-lru 最大内存策略,根据 LRU 算法移除所有的 key 。
volatile-ttl 删除最快要过期的 key。
noeviction 不让任何 key 过期,只是给写入操作返回一个错误。
maxmemory-policy noeviction 最大内存时,使用的内存策略是什么。
maxmemory-samples 5 当达到最大内存时,Redis 检查几个 key,从中选出一个进行删除。

Redis持久化配置

配置 说明
appendonly no 是否启用 AOF 持久化模式。
appendfilename “appendonly.aof” AOF 文件名。
appendfsync always 每次写入操作都会更新到 AOF 文件。
appendfsync everysec 每秒写入一次 AOF 操作。
appendfsync no 永远不写入 AOF 文件。
no-appendfsync-on-rewrite no 1. bgrewriteaof 往往会涉及大量磁盘操作,这样就会造成主进程在写 aof 文件的时候出现阻塞的情形,这时候 no-appendfsync-on-rewrite 参数就起作用了。
2. 如果该参数设置为 no,是最安全的方式,不会丢失数据,但是要忍受阻塞的问题。
3. 如果设置为 yes,这就相当于将 appendfsync 设置为 no,这说明并没有执行磁盘操作,只是写入了缓冲区,因此这样并不会造成阻塞(因为没有竞争磁盘),但是如果这个时候 Redis 挂掉,就会丢失数据。
auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb 1. AOF 持久化看上去很好,实际上并没那么简单,因为 Redis 会不断地将被执行的写命令记录到 AOF 文件中,AOF 文件的体积会越来越大,极端情况下可能会撑满硬盘。
2. 另外一个问题是,Redis 在重启之后需要通过重新执行 AOF 文件记录的所有写命令来还原数据集,所以如果 AOF 文件的体积非常大,那么还原操作执行的时间就可能非常长。
3. 为了解决上述问题,可以向 Redis 发送 BGREWRITEAOF 命令,BGREWRITEAOF 命令会通过移除 AOF 文件中的冗余命令来重写 AOF 文件,使得AOF 文件的体积变得尽可能的小。
4. 也可以设置 auto-aof-rewrite-percentage 和 auto-aof-rewrite-min-size 来自动触发 BGREWRITEAOF 命令。
5. Redis 默认行为的意思是当 AOF 的体积大于 64M,并且比上一次重写之后的体积大了至少一倍(100%)的时候,Redis 将执行 BGREWRITEAOF 命令。
6. 如果 AOF 重写执行的过于频繁的话,可以调整 auto-aof-rewrite-percentage 选项的值设置为 100 以上,让 Redis 在 AOF 文件的体积变得更大之后才执行重写操作。

Redis使用Lua脚本

配置 说明
lua-time-limit 5000 Lua 脚本执行的最长时间。

Redis集群配置

配置 说明
cluster-enabled yes 启用或停用集群。
cluster-config-file nodes-6379.conf Redis 集群节点的配置文件。
cluster-node-timeout 15000 节点的超时时间。

Redis慢查询配置

配置 说明
slowlog-log-slower-than 10000 1. 只有 query 执行时间大于 slowlog-log-slower-than 的才会定义成慢查询,才会被 slowlog 进行记录。
2. slowlog-log-slower-than 设置的单位是微妙,默认是 10000 微妙,也就是10ms。
slowlog-max-len 128 1. slowlog-max-len 表示慢查询最大的条数,当 slowlog 超过设定的最大值后,会将最早的 slowlog 删除。
2. Slowlog 是个 FIFO 队列。

Redis配置详解总结

Redis 的配置文件为 redis.conf,按照种类区别,Redis 的配置可以分为:引入其他配置文件配置、通用配置、主从配置、安全配置、资源使用配置、使用 LUA 脚本、持久化配置、集群配置和慢查询配置。