跳至主要內容

Redis的配置文件详解

晨光-向大约 8 分钟RedisRedis数据库非关系型数据库缓存

Redis的配置文件详解

进入 /usr/local/bin/redis-config 打开配置文件 redis.conf

1. 单位

# 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.

配置文件 unit单位 redis.conf对内存大小的大小写不敏感

2. 包含 INCLUDES

################################## INCLUDES ###################################

# Include one or more other config files here.  This is useful if you
# have a standard template that goes to all Redis servers but also need
# to customize a few per-server settings.  Include files can include
# other files, so use this wisely.
#
# Notice option "include" won't be rewritten by command "CONFIG REWRITE"
# from admin or Redis Sentinel. Since Redis always uses the last processed
# line as value of a configuration directive, you'd better put includes
# at the beginning of this file to avoid overwriting config change at runtime.
#
# If instead you are interested in using includes to override configuration
# options, it is better to use include as the last line.
#
# include /path/to/local.conf
# include /path/to/other.conf

################################## MODULES #####################################

3. 网络 NETWORK

# 绑定的ip地址
bind 127.0.0.1

# 保护模式,默认是开启状态,只允许本地客户端连接, 可以设置密码或添加bind来连接
protected-mode yes

# 端口号,默认为6379,如果设为0,redis将不在socket 上监听任何客户端连接
port 6379

# TCP监听的最大容纳数量,在高并发的环境下,你需要把这个值调高以避免客户端连接缓慢的问题。Linux 内核会把这个值缩小成 /proc/sys/net/core/somaxconn对应的值,要提升并发量需要修改这两个值才能达到目的
tcp-backlog 511

# 指定redis监听的unix socket路径,默认不启用,unixsocketper指定文件的权限
unixsocket /tmp/redis.sock
unixsocketperm 700

# 指定在一个 client 空闲多少秒之后关闭连接(0表示永不关闭)
timeout 0

# 单位是秒,表示将周期性的使用SO_KEEPALIVE检测客户端是否还处于健康状态,避免服务器一直阻塞,官方给出的建议值是300s,如果设置为0,则不会周期性的检测
tcp-keepalive 300

4. 通用配置 GENERAL

# 默认情况下 redis 不是作为守护进程运行(后台的方式运行)的 (默认是 no) ,如果你想让它在后台运行,你就把它改成 yes。当redis作为守护进程运行的时候,它会写一个 pid 到 /var/run/redis.pid 文件里面
daemonize yes 

# 可以通过upstart和systemd管理Redis守护进程
# 选项:
#   supervised no - 没有监督互动
#   supervised upstart - 通过将Redis置于SIGSTOP模式来启动信号
#   supervised systemd - signal systemd将READY = 1写入$ NOTIFY_SOCKET
#   supervised auto - 检测upstart或systemd方法基于 UPSTART_JOB或NOTIFY_SOCKET环境变量
supervised no 

# 配置PID文件路径,当redis作为守护进程运行的时候(后台的方式运行),它会把 pid 默认写到 /var/redis/run/redis_6379.pid 文件里面
pidfile /var/run/redis_6379.pid

# 定义日志级别。
#  可以是下面的这些值:
#  debug(记录大量日志信息,适用于开发、测试阶段)
#  verbose(较多日志信息)
#  notice(适量日志信息,使用于生产环境)
#  warning(仅有部分重要、关键信息才会被记录)
loglevel notice

# 日志文件的位置,当指定为空字符串时,为标准输出,如果redis已守护进程模式运行,那么日志将会输出到/dev/null
logfile ""

# 要想把日志记录到系统日志,就把它改成 yes,也可以可选择性的更新其他的syslog 参数以达到你的要求
syslog-enabled no

# 设置系统日志的ID
syslog-ident redis

# 指定系统日志设置,必须是 USER 或者是 LOCAL0-LOCAL7 之间的值
syslog-facility local0

# 设置数据库的数目 (默认有16个数据库)。默认的数据库是DB 0 ,可以在每个连接上使用select  <dbid> 命令选择一个不同的数据库,dbid是一个介于0到databases - 1 之间的数值。
databases 16

# 是否总是显示LOGO
always-show-logo yes 

5. 快照 SNAPSHOTTING

持久化, 在规定的时间内,执行了多少次操作,则会持久化到文件 .rdb. aof

redis 是内存数据库,如果没有持久化,那么数据断电及失!

# 存 DB 到磁盘:
#    格式:save <间隔时间(秒)> <写入次数>
#    根据给定的时间间隔和写入次数将数据保存到磁盘

#    注意:你可以注释掉所有的 save 行来停用保存功能。
#    也可以直接一个空字符串来实现停用:save ""
# 如果900s内,如果至少有一个1 key进行了修改,我们及时进行持久化操作 
save 900 1 
# 如果300s内,如果至少10 key进行了修改,我们及时进行持久化操作 
save 300 10 
# 如果60s内,如果至少10000 key进行了修改,我们及时进行持久化操作 
save 60 10000

# 持久化如果出错,是否还需要继续工作!
#  如果用户开启了RDB快照功能,那么在redis持久化数据到磁盘时如果出现失败,默认情况下,redis会停止接受所有的写请求。
#  这样做的好处在于可以让用户很明确的知道内存中的数据和磁盘上的数据已经存在不一致了。
#  如果redis不顾这种不一致,一意孤行的继续接收写请求,就可能会引起一些灾难性的后果。
#  如果下一次RDB持久化成功,redis会自动恢复接受写请求。
#  如果不在乎这种数据不一致或者有其他的手段发现和控制这种不一致的话,可以关闭这个功能,以便在快照写入失败时,也能确保redis继续接受新的写请求。
stop-writes-on-bgsave-error yes 

#  对于存储到磁盘中的快照,可以设置是否进行压缩存储。
#  如果是的话,redis会采用LZF算法进行压缩。如果你不想消耗CPU来进行压缩的话,
#  可以设置为关闭此功能,但是存储在磁盘上的快照会比较大。
rdbcompression yes

# 在存储快照后,我们还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能。[保存rdb文件的时候,进行错误的检查校验!]
rdbchecksum yes 

# 设置快照的文件名
dbfilename dump.rdb

# 设置快照文件的存放路径,这个配置项一定是个目录,而不能是文件名
dir ./ 

6. 主从复制 REPLICATION

详见主从复制

7. 安全 SECURITY

设置密码

  • 方式一: 配置文件中设置
# requirepass foobared
# 设置redis密码
requirepass 123456
  • 方式二: 命令行
127.0.0.1:6379> config get requirepass # 获取redis密码
1) "requirepass"
2) ""
127.0.0.1:6379> config set requirepass "123456" # 设置redis密码
OK
127.0.0.1:6379> config get requirepass # 没有密码,所有命令没有权限
(error) NOAUTH Authentication required.
127.0.0.1:6379> ping 
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 123456 # 使用密码认证登录
OK
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "123456"
  • 密码认证登录
# 1. 方式不安全
[root@VM-0-14-centos bin]# redis-cli -p 6379 -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> 

# 2. 安全
[root@VM-0-14-centos bin]# redis-cli -p 6379
127.0.0.1:6379> auth 123456 # 使用密码认证登录
OK
127.0.0.1:6379> 

8. 限制 CLIENTS

#   设置"客户端最大并发连接数",默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件. 描述符数-32(redis server自身会使用一些),如果设置 maxclients为0. 表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息
maxclients 10000

# redis 配置最大的内存容量
# 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key. 当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区,格式:maxmemory <bytes>
maxmemory <bytes> 

# 内存到达上限之后的处理策略
# 1、volatile-lru:只对设置了过期时间的key进行LRU(默认值) 2、allkeys-lru : 删除lru算法的key 3、volatile-random:随机删除即将过期key 4、allkeys-random:随机删除 5、volatile-ttl : 删除即将过期的 6、noeviction : 永不过期,返回错误
maxmemory-policy noeviction

#  LRU 和 minimal TTL 算法都不是精准的算法,但是相对精确的算法(为了节省内存)
#  随意你可以选择样本大小进行检,redis默认选择3个样本进行检测,你可以通过maxmemory-samples进行设置样本数
maxmemory-samples 5

9. aof模式 APPEND ONLY MODE

appendonly no # 默认是不开启aof模式的,默认是使用rdb方式持久化的,在大部分所有的情况下, rdb完全够用! 

appendfilename "appendonly.aof" # 持久化的文件的名字 

# appendfsync always # 每次修改都会 sync。消耗性能 
appendfsync everysec # 每秒执行一次 sync,可能会丢失这1s的数据!
# appendfsync no # 不执行 sync,这个时候操作系统自己同步数据,速度最快!