凌云的博客

行胜于言

Redis 配置详解(一)

分类:Redis| 发布时间:2019-04-09 10:46:00


概述

本文主要描述了 Redis 各个配置项的作用以及可能的取值,主要针对 Redis 5.0.4 版本,不同版本的选项会有所不同。

配置文件

在 Ubuntu 下,如果你是以 deb 包的形式安装 Redis 的,那么 redis 的默认配置文件将在 /etc/redis/redis.conf。 打开 /etc/redis/redis.conf 我们首先会看到 Redis 配置文件中单元大小的解释:

# Note on units: when memory size is needed, it is possible to specify
# it in the usual form of 1k 5GB 4M and so forth:
#
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes
#
# units are case insensitive so 1GB 1Gb 1gB are all the same.

include 选项

include /path/to/local.conf

Redis 支持通过 include 选项来载入其他配置文件

模块选项

loadmodule /path/to/my_module.so
loadmodule /path/to/other_module.so

Redis 可以通过 loadmodule 选项在启动时加载模块,若服务端无法加载模块,服务端会停止。 可以通过多个 loadmodule 选项加载多个模块。

网络选项

bind 127.0.0.1

bind 选项用于设置监听的 network interface,不设置这个选项相当于 bind 0.0.0.0,可以通过这个选项监听多个 network interface, 如:

bind 192.168.1.100 10.0.0.1

当设置多个 bind 地址后,Redis 内部会维护多个 Socket,每个 Socket 用于一个 network interface。

protected-mode yes

此选项默认开启,开启此选项后, 当 Redis 服务端未使用 bind 选项显式指定要监听的 network interface,并且未设置密码, Redis 服务端只会接受来自 127.0.0.1 和 ::1 的客户端以及 Unix 域的 Socket 进行连接。

port 6379

port 选项用于设置 Redis 监听的 TCP 端口,默认为 6379,设置为 0 表示不监听 TCP 端口

tcp-backlog 511

tcp-backlog 用于设置 TCP 连接的排队队列长度,最终就是影响到 listen 接口的 backlog 参数。

unixsocket /var/run/redis/redis.sock
unixsocketperm 700

unixsocket 和 unixsocketperm 用于设置 Unix 域套接字,默认不开启。

timeout 0

当客户端空闲 timeout 秒后,Redis 服务端主动关闭此连接, 0 表示不启用此功能。

tcp-keepalive 300

将此值设置为非 0 值表示启用协议层的心跳检测功能,此功能是通过 setsockopt 的 SO_KEEPALIVE 选项开启的。

通用选项

daemonize yes

设置 daemonize 选项为 yes 会使 Redis 以守护进程模式启动,在此模式下,Redis 默认会将 pid 写入 /var/run/redis.pid。 可以通过 pidfile 选项修改写入的文件,如:

pidfile /var/run/redis/redis-server.pid
supervised no

当你通过 upstart 或者 systemd 运行 Redis 时,Redis 可以和你的 supervision tree 进行交互,可选的选项为:

  • no 无交互
  • upstart 通过向 Redis 发送 SIGSTOP 信号来通知 upstart
  • systemd 通过向 $NOTIFY_SOCKET 写入 READY=1 来通知 systemd
  • auto 通过是否设置了 UPSTART_JOB 或者 NOTIFY_SOCKET 环境变量来决定选项为 upstart 或者 systemd
loglevel notice

日志级别,可以设置为: debug、verbose、notice、warning 中的一个。

logfile /var/log/redis/redis-server.log

logfile 选项用于设置日志输出的路径,若没有设置此路径,则 Redis 会将日志输出到标准输出,若以守护进程模式启动则输出到 /dev/null。

# To enable logging to the system logger, just set 'syslog-enabled' to yes,
# and optionally update the other syslog parameters to suit your needs.
# syslog-enabled no

# Specify the syslog identity.
# syslog-ident redis

# Specify the syslog facility. Must be USER or between LOCAL0-LOCAL7.
# syslog-facility local0

以上三个选项用于设置是否将日志输出到 syslog,syslog-ident 和 syslog-facility 对应了系统接口 openlog 的 ident 和 facility 选项。

databases 16

Redis 的数据库个数,当你连接到 Redis 服务器时,默认会选中 0 号数据库,可以通过 SELECT num 命令,选择要使用的数据库(num 表示 0 到 此选项的值减 1 的数据库)。

always-show-logo yes

默认情况下,Redis 只会在交互模式才显示 ASCII 版本的 logo,可以通过设置此选项为 yes,使 Redis 在任何情况下都显示 logo,使得 Redis 的此行为和 4.0 之前的版本行为保持一致。

快照选项

save 900 1
save 300 10
save 60 10000

save 选项用于设置 Redis 将数据库持久化到硬盘的时间,可以有多个 save 选项。 save 后面的第一个数字表示多少秒进行一次检查,第二个数字表示此时间内有多少个 key 被改变会将数据库持久化到硬盘。 比如上面的三个选项表示,每 900 秒内,如果有多于 1 个 key 被改变(包括增加,修改,删除)则将其持久化到硬盘, 每 300 秒内,如果有多于 10 个 key 被改变则将其持久化到硬盘,每 60 秒内,如果有多于 10000 个 key 被改变则将其持久化到硬盘。

stop-writes-on-bgsave-error yes

当最近一次的持久化操作失败后,Redis 会拒绝客户端的写入操作,通过这种行为客户端会知道服务端的不正常现象。 若持久化操作可以正常工作后,服务端会自动允许客户端的写入操作。 如果你自己有 Redis 服务端的监控方案,或者你希望即使持久化失败 Redis 也可以正常工作,则可以将此选项设置为 no。

rdbcompression yes

设置为 yes 表示使用 LZO 算法压缩持久化到硬盘的 string 对象。

rdbchecksum yes

RDB 文件是否开启校验和。

dbfilename dump.rdb

RDB 文件的文件名。

dir /var/lib/redis

Redis 的工作目录,RDB 和 AOF (后面会说)文件会保存到此目录。