配置文件
本内容介绍 Redis 的配置文件内容,这也是 Redis 进阶、优化需要掌握的技能。建议打开着配置文件看,理解更好。
位置
Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf。
config get * # 获取全部的配置
我们一般情况下,会单独拷贝出来一份进行操作。来保证初始文件的安全。
单位
容量单位不区分大小写,但是容量大小 G 和 GB 有区别。
配置大小单位,开头定义了一些基本的度量单位,只支持 bytes,不支持 bit。
include
类似 jsp 中的 include,可以通过 includes 包含其他文件,redis.conf 可以作为总文件,可以包含其他文件,即 多实例的情况可以把公用的配置文件提取出来。
NETWORK网络配置
bind、protected-mode、Port
bind 127.0.0.1 # 绑定的ip
protected-mode yes # 保护模式
port 6379 # 默认端口
默认情况 bind=127.0.0.1
只能接受本机的访问请求,如果注释掉或不写的情况下,无限制接受任何 ip 地址的访问。
生产环境肯定要写你应用服务器的地址,服务器是需要远程访问的,所以需要将其注释掉。
如果开启了 protected-mode
,那么在没有设定 bind ip 且没有设密码的情况下,Redis 只允许接受本机的响应。
tcp-backlog
设置 tcp 的 backlog。backlog 其实是一个连接队列,backlog 队列总和 = 未完成三次握手队列 + 已经完成三次握手队列。
在高并发环境下需要一个高 backlog 值来避免慢客户端连接问题。
注意 Linux 内核会将这个值减小到 /proc/sys/net/core/somaxconn
的值(128),所以需要确认增大 /proc/sys/net/core/somaxconn
和 /proc/sys/net/ipv4/tcp_max_syn_backlog(128)
两个值来达到想要的效果。
timeout
一个空闲的客户端维持多少秒会关闭,0 表示关闭该功能。即永不关闭。
tcp-keepalive
对访问客户端的一种心跳检测,每个 n 秒检测一次。
单位为秒,如果设置为 0,则不会进行 Keepalive 检测,建议设置成 60。
GENERAL通用
daemonize
是否为后台进程,设置为 yes 为守护进程,后台启动。
pidfile
存放 pid 文件的位置,每个实例会产生一个不同的 pid 文件。
loglevel
指定日志记录级别,Redis 总共支持四个级别:debug、verbose、notice、warning,默认为 notice。
四个级别根据使用阶段来选择,生产环境选择 notice 或者 warning。
logfile
日志文件名称
databases
设定库的数量 默认 16,默认数据库为 0,可以使用 SELECT <dbid>
命令在连接上指定数据库 id。
常用模板如下:
daemonize yes # 默认情况下,Redis 不作为守护进程运行。需要开启的话,改为 yes
supervised no # 可通过 upstart 和 systemd 管理 Redis 守护进程
loglevel notice # 日志级别。可选项有:
# debug(记录大量日志信息,适用于开发、测试阶段)
# verbose(较多日志信息)
# notice(适量日志信息,使用于生产环境)
# warning(仅有部分重要、关键信息才会被记录)
logfile "" # 日志文件的位置,当指定为空字符串时,为标准输出
databases 16 # 设置数据库的数目。默认的数据库是 DB 0
always-show-logo yes # 是否总是显示 logo
SNAPSHOPTING持久化
由于 Redis 是基于内存的数据库,需要将数据由内存持久化到文件中。
持久化方式:
- RDB
- AOF
AOF 配置:
# 900秒(15分钟)内至少 1 个 key 值改变(则进行数据库保存--持久化)
save 900 1
# 300秒(5分钟)内至少 10 个 key 值改变(则进行数据库保存--持久化)
save 300 10
# 60秒(1分钟)内至少 10000 个 key 值改变(则进行数据库保存--持久化)
save 60 10000
RDB 配置:(内容太长,以代码显示)
stop-writes-on-bgsave-error yes # 持久化出现错误后,是否依然进行继续进行工作
rdbcompression yes # 使用压缩 rdb 文件 yes:压缩,但是需要一些 cpu 的消耗。no:不压缩,需要更多的磁盘空间
rdbchecksum yes # 是否校验 rdb 文件,更有利于文件的容错性,但是在保存 rdb 文件的时候,会有大概 10% 的性能损耗
dbfilename dump.rdb # dbfilenamerdb 文件名称
dir ./ # dir 数据目录,数据库的写入会在这个目录。rdb、aof 文件也会写在这个目录
REPLICATION主从复制
简单认识,后面详细说。
SECURITY安全
命令访问密码的查看,设置和取消,缺点:在命令中设置密码,只是临时的。重启 redis 服务器,密码就还原了。
# 启动redis
# 连接客户端
# 获得和设置密码
config get requirepass
config set requirepass "123456"
#测试ping,发现需要验证
127.0.0.1:6379> ping
NOAUTH Authentication required.
# 验证
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> ping
PONG
或者在配置文件修改密码:
requirepass "123456"
客户端连接相关
maxclients
设置 Redis 同时可以与多少个客户端进行连接。
默认情况下为 10000 个客户端,如果达到了此限制,Redis 则会拒绝新的连接请求,并且向这些连接请求方发出 max number of clients reached
以作回应。
maxmemory
建议必须设置,否则,将内存占满,造成服务器宕机,设置 Redis 可以使用的内存量。一旦到达内存使用上限,Redis 将会试图移除内部数据,移除规则可以通过 maxmemory-policy 来指定。
如果 Redis 无法根据移除规则来移除内存中的数据,或者设置了「不允许移除」,那么 Redis 则会针对那些需要申请内存的指令返回错误信息,比如 SET、LPUSH 等。
但是对于无内存申请的指令,仍然会正常响应,比如 GET 等。如果你的 Redis 是主 Redis(说明你的 Redis 有从 Redis),那么在设置内存使用上限时,需要在系统中留出一些内存空间给同步队列缓存,只有在你设置的是「不移除」的情况下,才不用考虑这个因素。
maxmemory-policy
maxmemory-policy
六种方式:
volatile-lru:利用 LRU 算法移除设置过过期时间的 key
allkeys-lru: 用 LRU 算法删除 key
volatile-random:随机删除即将过期 key
allkeys-random:随机删除
volatile-ttl:删除即将过期的
noevictionx:不移除任何 key,只是返回一个写错误
redis 中的 默认 的过期策略是 volatile-lru
。
命令设置方式
config set maxmemory-policy volatile-lru
配置文件设置
maxclients 10000 # 最大客户端数量
maxmemory <bytes> # 最大内存限制
maxmemory-policy noeviction # 内存达到限制值的处理策略
maxmemory-samples
设置样本数量,LRU 算法和最小 TTL 算法都并非是精确的算法,而是估算值,所以你可以设置样本的大小,redis 默认会检查这么多个 key 并选择其中 LRU 的那个。
一般设置 3 到 7 的数字,数值越小样本越不准确,但性能消耗越小。
appendonly模式
AOF 相关部分
appendfsync everysec
# appendfsync aof 持久化策略的配置
# no 表示不执行 fsync,由操作系统保证数据同步到磁盘,速度最快。
# always表示每次写入都执行 fsync,以保证数据同步到磁盘。
# everysec表示每秒执行一次 fsync,可能会导致丢失这 1s数据。