Redis 的配置文件为 redis.conf,按照种类区别,Redis 的配置可以分为:引入其他配置文件配置、通用配置、主从配置、安全配置、资源使用配置、使用 LUA 脚本、持久化配置、集群配置和慢查询配置。
配置 | 说明 |
---|---|
include /path/to/local.conf | 1. 如果你有一个可用于所有的 redis server 的标准配置模板,但针对某些 server 又需要一些个性化的设置,可以使用 include 来包含一些其他的配置文件。 2. 注意,include 是不能被 config rewrite 命令改写的。 |
配置 | 说明 |
---|---|
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. 这个配置项一定是个目录,而不能是文件名。 |
配置 | 说明 |
---|---|
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 秒时,主服务器将拒绝执行写命令。 |
配置 | 说明 |
---|---|
requirepass foobared | 设置认证密码。如果设置了密码,那么 client 在操作之前必须要使用 AUTH |
rename-command CMD1 CMD2 | 将 CMD1 重命名为 CMD2。这里的作用可以将一些危险的命令重命名为一个新的CMD。 |
rename-command CONFIG “” | 如果想禁用某些配置,则可以使用此选项。 |
配置 | 说明 |
---|---|
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,从中选出一个进行删除。 |
配置 | 说明 |
---|---|
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 文件的体积变得更大之后才执行重写操作。 |
配置 | 说明 |
---|---|
lua-time-limit 5000 | Lua 脚本执行的最长时间。 |
配置 | 说明 |
---|---|
cluster-enabled yes | 启用或停用集群。 |
cluster-config-file nodes-6379.conf | Redis 集群节点的配置文件。 |
cluster-node-timeout 15000 | 节点的超时时间。 |
配置 | 说明 |
---|---|
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.conf,按照种类区别,Redis 的配置可以分为:引入其他配置文件配置、通用配置、主从配置、安全配置、资源使用配置、使用 LUA 脚本、持久化配置、集群配置和慢查询配置。