Redis 的配置
# 90.Redis 的配置
通过之前的学习,相信大家对 Redis 已经有一定的认知了,接下来我们讲解 Redis 的常用配置。
# Redis 服务端的端口
之前我们是这样启动 Redis 的:Redis 服务器默认会使用 6379 端口
$ redis-server
为什么 Redis 的作者要用这个端口呢? 因为 6379 是手机键盘上 MERZ 对应的数字,MERZ 是一名意大利歌女的名字 ヾ(•ω•`)o
我们可以在启动时,通过 --port
参数可以自定义端口号:
$ redis-server --port 6380
或者在配置文件里指定:
port 6380
# 配置文件和启动参数
像持久化、端口等配置,也可以在启动 Redis 时通过指定参数指定的,由于可以配置的选项较多,通过启动参数设置这些选项并不方便,所以 Redis 支持通过配置文件来设置这些选项。
启用配置文件的方法是在启动时将配置文件的路径作为启动参数传递给 redis-server,如:
$ redis-server /path/to/redis.conf
通过启动参数传递同名的配置选项,会覆盖配置文件中相应的参数,就像这样:
$ redis-server /path/to/redis.conf --loglevel warning
Redis 提供了一个配置文件的模板 redis.conf,位于源代码目录的根目录中。
# 动态修改 Redis 配置
我们还可以在 Redis 运行时通过 CONFIG SET 命令在不重新启动 Redis 的情况下动态修改部分 Redis 配置:
redis> CONFIG SET loglevel warning
OK
2
如上命令修改了 Redis 的日志级别。并不是所有的配置都可以使用 CONFIG SET 命令修改,更多可以参考附录 B
同样在运行的时候也可以使用 CONFIG GET 命令获得 Redis 当前的配置情况,如:
redis> CONFIG GET loglevel
1) "loglevel"
2) "warning"
redis> CONFIG GET port
1) "port"
2) "6379"
2
3
4
5
6
7
其中第一行字符串回复表示的是选项名,第二行即是选项值。
还可以通过通配符获取所有配置:这里就不列出所有配置了
CONFIG GET *
1) "dbfilename"
2) "dump.rdb"
3) "requirepass"
4) ""
5) "masterauth"
6) ""
7) "unixsocket"
8) ""
9) "logfile"
10) ""
......
2
3
4
5
6
7
8
9
10
11
12
动态修改配置后,还可以将配置写入到配置文件里:
CONFIG REWRITE
# 重命名命令
Redis 支持在配置文件中将命令重命名,比如将 FLUSHALL 命令重命名成一个比较复杂的名字,以保证只有自己的应用可以使用该命令。就像这样:
rename-command FLUSHALL oyfekmjvmwxq5a9c8usofuo369x0it2k
如果希望直接禁用某个命令可以将命令重命名成空字符串:
rename-command FLUSHALL ""
# daemonize
daemonize 在英语中就是守护进程的意思。
如果想要后台启动,则需修改配置文件,daemonize no 改成 daemonize yes。
- daemonize: yes redis 采用的是单进程多线程的模式。当 redis.conf 中选项 daemonize 设置成 yes 时,代表开启守护进程模式。在该模式下,redis 会在后台运行,并将进程 pid 号写入至 redis.conf 选项 pidfile 设置的文件中,此时 redis 将一直运行,除非手动 kill 该进程。
- daemonize: no 当 daemonize 选项设置成 no 时,当前界面将进入 redis 的命令行界面,exit 强制退出或者关闭连接工具(putty, xshell 等)都会导致 redis 进程退出。
redis 配置文件的注释:
# By default Redis does not run as a daemon. Use 'yes' if you need it.
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
# When Redis is supervised by upstart or systemd, this parameter has no impact.
daemonize no
2
3
4
# 基本配置
讲讲一些常用的基本配置
logfile ""
#日志文件位置及文件名称, 默认值为 stdout,标准输出,若后台模式会输出到/dev/null
bind 0.0.0.0
#监听地址,可以有多个 如 bind 0.0.0.0 127.0.0.1
daemonize yes
#yes 启动守护进程运行,即后台运行,no 表示不启用
pidfile /var/run/redis.pid
# 当 redis 在后台运行的时候,Redis 默认会把 pid 文件在在/var/run/redis.pid,也可以配置到其他地方。当运行多个 redis 服务时,需要指定不同的 pid 文件和端口
port 6379
# 指定 redis 运行的端口,默认是 6379
timeout 0
# 设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接, 0 是关闭此设置
loglevel debug
# 指定日志记录级别,Redis 总共支持四个级别:debug、verbose、notice、warning,默认为 verbose
databases 16
#配置可用的数据库个数,默认值为 16,默认数据库为 0,数据库范围在 0-(database-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
# 持久化的相关配置
RDB:
save 900 1
save 300 10
save 60 10000
#配置快照(rdb)促发规则,格式:save <seconds> <changes>
#save 900 1 900 秒内至少有 1 个 key 被改变则做一次快照
#save 300 10 300 秒内至少有 300 个 key 被改变则做一次快照
#save 60 10000 60 秒内至少有 10000 个 key 被改变则做一次快照
dbfilename dump.rdb
#rdb 持久化存储数据库文件名,默认为 dump.rdb
stop-write-on-bgsave-error yes
#yes 代表当使用 bgsave 命令持久化出错时候停止写 RDB 快照文件,no 则代表继续写
rdbchecksum yes
#开启 rdb 文件校验
dir "/etc"
#数据文件存放目录,rdb 快照文件和 aof 文件都会存放至该目录
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
AOF:
appendonly no
# 设置 AOF 持久化,yes 开启,no 禁用,开启后 redis 会把所接收到的每一次写操作请求都追加到 appendonly.aof 文件中,当 redis 重新启动时,会从该文件恢复出之前的状态。
appendfilename "appendonly.aof"
#设置 AOF 文件名
appendfsync everysec
# AOF 文件写策略,Redis 支持三种同步 AOF 文件的策略:
# no: 不进行同步,交给操作系统去执行 ,速度较快
# always: always 表示每次有写操作都调用 fsync 方法强制内核将该写操作写入到文件,速度会慢, 但是安全,因为每次写操作都在 AOF 文件中.
# everysec: 表示对写操作进行累积,每秒同步一次,折中方案.
# 默认是 "everysec",按照速度和安全折中这是最好的。
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
#当AOF 文件增长到一定大小的时候 Redis 能够调用 BGREWRITEAOF 对日志文件进行重写,它是这样工作的:Redis 会记住上次进行些日志后文件的大小(如果从开机以来还没进行过重写,那日子大小在开机的时候确定)。
#基础大小会同现在的大小进行比较。如果现在的大小比基础大小大制定的百分比,重写功能将启动
# 同时需要指定一个最小大小用于 AOF 重写,这个用于阻止即使文件很小但是增长幅度很大也去重写 AOF 文件的情况
# 设置 percentage 为 0 就关闭这个特性
#auto-aof-rewrite-percentage 代表 AOF 文件每次重写文件大小(以百分数代表),100 表示百分之百,即当文件增加了 1 倍(100%),则开始重写 AOF 文件
#auto-aof-rewrite-min-size 设置最小重写文件大小,避免文件小而执行太多次的重写
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 复制相关的配置
slaveof <masterip> <masterport>
#设置该数据库为其他数据库的从数据库,设置当本机为 slave 服务时,设置 master 服务的 IP 地址及端口,在 Redis 启动时,它会自动从 master 进行数据同步
masterauth <master-password>
#主从复制中,设置连接 master 服务器的密码(前提 master 启用了认证)
repl-ping-slave-period 10
#从库会按照一个时间间隔向主库发送 PING 命令来判断主服务器是否在线,默认是 10 秒
repl-timeout 60
#设置主库批量数据传输时间或者 ping 回复时间间隔超时时间,默认值是 60 秒
# 一定要确保 repl-timeout 大于 repl-ping-slave-period
slave-priority 100
#当主库发生宕机时候,哨兵会选择优先级最高的一个称为主库,从库优先级配置默认 100,数值越小优先级越高
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 安全相关配置
requirepass 123465
#客户端连接认证的密码,默认为空,即不需要密码,若配置则命令行需使用 AUTH 进行认证
maxclients 10000
# 设置同一时间最大客户端连接数,4.0 默认 10000,Redis 可以同时打开的客户端连接数为 Redis 进程可以打开的最大文件描述符数,
# 如果设置 maxclients 0,表示不作限制。
# 当客户端连接数到达限制时,Redis 会关闭新的连接并向客户端返回 max number of clients reached 错误信息
maxmemory 4gb
#设置最大使用的内存大小
maxmemory-policy noeviction
#设置达到最大内存采取的策略:
# volatile-lru -> 利用 LRU 算法移除设置过过期时间的 key (LRU: 最近使用 Least Recently Used )
# allkeys-lru -> 利用 LRU 算法移除任何 key
# volatile-random -> 移除设置过过期时间的随机 key
# allkeys-> random -> remove a random key, any key
# volatile-ttl -> 移除即将过期的 key(minor TTL)
# 4.0 默认 noeviction 代表不删除任何 key,只在写操作时候返回错误。
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20