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