恰当地设定 Redis 服务器参数,才能保证服务器正确、高性能、安全地运转。通过这些参数,我们还能了解 Redis 服务器内部运转的机制和细节。同时,主从复制和 Redis 集群的部署也要掌握相关配置项。

作者:王克锋
出处:https://kefeng.wang/2017/08/12/redis-config/
版权:自由转载-非商用-非衍生-保持署名,转载请标明作者和出处。

1 配置概述

官方文档:Redis 配置,redis.conf

1.1 配置项格式

格式:keyword argument1 argument2 ... argumentN
例子:slaveof 127.0.0.1 6379
一个参数名称,后跟1至多个参数值,名称与各值之间以空格分隔。
如果单个值内包含空格,该值必须以双引号界定。

1.2 容量值的形式

有三种格式,单位里的字母大小写无关,比如 kb/kB/Kb/KB 是一样的。

  • 没有单位:单位为字节,比如 4096 表示 4096 字节
  • 无b单位:1k=1000 字节,1m=1000x1000 字节,1g=1000x1000x1000 字节
  • 带b单位:1kb=1024 字节,1mb=1024x1024 字节,1gb=1024x1024x1024 字节

1.3 参数传递方式

服务启动命令行:redis-server redis.conf --slaveof localhost 6379

  • redis-server 可以无参数启动,此时使用内置的默认配置(建议仅实验时这样用);
  • 指定配置文件(可选,建议指定):必须是 redis-server 之后的首个参数;
  • 指定配置参数(可选):参数名称和取值与配置文件内部一致,只是关键字前加前缀(–),Redis 会在内存中生成临时配置文件。

1.4 服务器运行时更改配置

命令 CONFIG GET: 查询配置项及其值(可使用通配符);
命令 CONFIG SET: 修改配置项(服务器不重启的情况下立即生效)。

127.0.0.1:6379> config get max* ## 查询多个配置项
127.0.0.1:6379> config get save ## 查询单个配置项
127.0.0.1:6379> config set save "900 1 300 10 60 10000" ## 修改配置

2 配置指令

2.1 include 指令

redis.conf 文件中,可以使用 include 指令引入外部配置文件。
比如,多个 Redis 实例中,把相同的配置提取出来保存成文件,各个实例引入此实例,更容易维护配置文件。

include /path/common1.conf
include /path/common2.conf
include /path/common3.conf

2.2 loadmodule 指令

服务启动时,加载功能扩展模块。这些模块,可以使用网上的,也可以自己开发。
相关资料:Redis Loadable Modules System、Redis Enterprise Module Hub、neural-redis

loadmodule /path/module1.so
loadmodule /path/module2.so
loadmodule /path/module3.so

3 网络相关参数

3.1 服务绑定的地址

格式:bind <ip> <ip> ...

  • bind 0.0.0.0(默认): 允许整个互联网上的客户端连接,最不安全,应当避免;
  • bind 127.0.0.1: 只允许本机客户端连接,最安全;
  • bind 127.0.0.1 192.168.1.102: 只允许本机和局域网客户端连接。

注意:切莫设置为bind 192.168.1.102这种形式,否则本机无法连接,也无法启停 Redis 服务。

3.2 服务绑定的端口

格式:bind <port>,默认值为 6379
比如:bind 6379

3.3 保护模式

格式:protected-mode yes|no,建议使用默认值 yes
当没有指定 bind(相当于 bind 0.0.0.0) 和 requirepass 时:
如果开启保护模式(默认值),则服务器强制当作配置了 bind 127.0.0.1
如果关闭保护模式,服务器当作配置了 bind 0.0.0.0,接受所有外部主机的连接。除非确认无风险,再关闭保护模式。

3.4 最大客户端数

格式:maxclients 10000
同一时刻最多可以接纳的客户端数目(Redis 服务要占用其中的大约 32 个文件描述符)。
如果客户端连接数达到该上限,新来客户端将被告知“已达到最大客户端连接数”。

3.5 TCP连接最大积压数

格式:tcp-backlog <num>
在大量客户端连接的情况下,应该提高该值,以免客户端连接慢。
但该值受系统内核参数的限制,包括 somaxconntcp_max_syn_backlog

3.6 客户端连接空闲超时时长

格式:timeout <seconds>,建议使用 0
当连接的客户端连续空闲指定时间后,就断开该连接。指定值为0时禁用超时机制。

4 常规参数

4.1 守护进程模式

格式:daemonize yes|no,建议使用 yes
设定是否以守护进程启动服务,守护进程会生成 PID 文件 /var/run/redis_6379.pid

4.2 指定 PID 文件

格式:pidfile /var/run/redis_6379.pid
启用守护进程模式时,会生成该文件。

4.3 指定日志文件

格式:logfile /var/log/redis_6379.log
指定保存日志的文件。

4.4 指定日志级别

格式:loglevel debug|verbose|notice|warning,推荐使用 notice
通常设置为 notice,需要更详细日志时可改为 verbose 甚至 debug。

4.5 指定数据库个数

格式:databases 16
表示该 Redis 实例创建 16 个数据库,编号分别是 0~15。
客户端连接后,当前数据库默认切换至 0,可以用 SELECT n 切换至其他数据库。

4.6 启动日志中是否显示 redis 徽标

格式:always-show-logo yes|no
除了耍酷,没啥用,建议关闭(no)。

5 快照相关参数(磁盘持久化)

5.1 快照生成时机

格式:save <seconds> <changes>,可设置为多条。
指定时间间隔后,如果数据变化达到指定次数,则导出至快照文件。
如果没有指定任何 save 行,则彻底禁止磁盘持久化行为。
如果指定 save "",则相当于清除前面指定的所有 save 行。

5.2 快照文件目录

格式:dir /var/lib/redis/6379
指定保存快照文件的目录(不包括文件名称)。
同时,AOF(Append Only File) 文件也会生成到该目录。

5.3 快照文件名称

格式:dbfilename dump.rdb
指定保存快照文件的名称(不包括文件目录)。

5.4 快照中字符串值是否压缩

格式:rdbcompression yes,建议 yes
以 CPU 换存储空间。

5.5 生成快照失败时是否禁止修改

格式:stop-writes-on-bgsave-error yes|no
在启用快照的情况下(指定了有效的 save),如果遇到某次快照生成失败(比如目录无权限),之后的数据修改就会被禁止。这有利于用户及早发现快照保存失败,以免更多的数据不能持久化而丢失的风险。当快照恢复正常后,数据的修改会自动开启。
如果你有其他的持久化监控,你可以关闭本机制。

5.6 快照中字符串值是否压缩

格式:rdbcompression yes,建议 yes
以 CPU 换存储空间。

5.7 快照校验开关

格式:rdbchecksum yes
如果开启,校验和会被放在文件尾部。这将使快照数据更可靠,但会在快照生成与加载时降低大约 10% 的性能,追求高性能时可关闭该功能。

6 主从同步相关参数

6.1 指定主库地址

格式:slaveof <masterip> <masterport>
当前 Redis 实例作为从库(副本),指定用来复制数据的主库的 IP 和端口。

6.2 指定主库密码

格式:masterauth <master-password>
如果主库设置了连接密码(参数 requirepass),从库连接主库后必须指定密码,才能继续。

6.3 从库是否答复陈旧数据

格式:slave-serve-stale-data yes|no
当从库与主库连接中断,或者主从同步正在进行时,如果有客户端向从库读取数据:

  • yes: 从库答复现有数据,可能是陈旧数据(初始从未修改的值则为空值)
  • no: 从库报错“正在从主库同步”

6.4 从库是否只许读取

格式:slave-read-only yes|no,默认为 yes
设定从库只许读取。

6.5 无盘同步(现阶段是实验性的)

格式:repl-diskless-sync no
新连接(包括连接中断后重连)的从库不可采用增量同步,只能采用全量同步(RDB文件由主库传给从库),有两种传递方式:

  • 磁盘形式:主库创建子进程,子进程写入磁盘 RDB 文件,再由父进程立即传给从库;
  • 无磁盘形式:主库创建子进程,子进程把 RDB 文件直接写入从库的 SOCKET 连接。

6.6 更多参数

  • repl-ping-slave-period 10:从库向主库PING的间隔(秒);
  • repl-timeout 60:从库向主库PING的超时时长,应大于 repl-ping-slave-period
  • repl-disable-tcp-nodelay no:是否关闭 TCP_NODELAY 选项
  • repl-backlog-size 1mb
  • repl-backlog-ttl 3600
  • slave-priority 100
  • min-slaves-to-write 3
  • min-slaves-max-lag 10
  • slave-announce-ip 5.5.5.5
  • slave-announce-port 1234

7 安全相关参数

7.1 客户端连接密码

格式:requirepass passwd
当设置为requirepass ""时,表示不要求客户端连接后指定密码。
客户端连接后,执行其他命令之前,必须用命令 AUTH passwd 认证。
注意:由于 Redis 响应速度极快(每秒可达 15 万次),密码应设置的足够复杂强壮,以防被暴力破解。

7.2 命令改名

格式:rename-command <command-name-old> <command-name-new>
对于一些敏感的命令,不希望任意客户端都可以执行,可以改为奇特的名字,新名字只告知特定的客户端来执行。
可以是命令改名:rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
可以是禁用命令:rename-command CONFIG "",即新名称为空串。
需要注意的是,命令改名保存至 AOF 文件或传输至从库,可能导致问题。

8 内存管理相关参数

8.1 Redis 内存使用上限

格式:maxmemory <bytes>
当内存达到上限时,Redis 将使用指定的策略清除其他键值。
如果 Redis 无法清除(或者策略不允许清除键值),将对占用内存的命令报错,但对只读的命令正常服务。

8.2 内存达到上限时的键值清除策略

格式:maxmemory-policy noeviction
下面几种策略中,LRU(Least Recently Used)表示最近最少使用,LFU(Least Frequently Used)表示最不经常使用。

  • volatile-lru: 针对到期的键值,采取 LRU 策略;
  • volatile-lfu: 针对到期的键值,采取 LFU 策略;
  • volatile-random: 针对到期的键值,采取随机策略;
  • allkeys-lru: 针对所有键值,采取 LRU 策略;
  • allkeys-lfu: 针对所有键值,采取 LFU 策略;
  • allkeys-random: 针对所有键值,采取随机策略;
  • volatile-ttl: Remove the key with the nearest expire time (minor TTL)
  • noeviction: 不清除任何内容,只是在写入操作时报错。

8.3 清除键值时取样数量

格式:maxmemory-samples 5
LRU/LFU 等策略,是从指定个数(而不是全部)的键值中检查并挑选一个。
取样越多,就越精确,但性能会下降,所以要平衡该数值。

8.4 懒释放相关参数

  • lazyfree-lazy-eviction no
  • lazyfree-lazy-expire no
  • lazyfree-lazy-server-del no
  • slave-lazy-flush no

9 慢日志相关参数

与 MySQL 类似,当 Redis 命令执行时间(不包括I/O和网络耗时)超过指定时长时,会被记入慢日志队列(内存)中。

  • slowlog-log-slower-than 10000:执行时长达到该数值时(微秒,1s/1000000)就存入慢日志队列。0表示所有命令都当作慢操作,负数表示所有命令都不当作慢操作;
  • slowlog-max-len 128: 慢日志队列的长度(内存中),只能保存最近这么多条慢操作,过多时挑最早的挤出去。

慢操作相关命令:

  • SLOWLOG LEN: 查询当前记录的慢操作条数;
  • SLOWLOG GET: 查看当前记录的慢操作详情,每个慢操作都记录了执行时间点、耗时、命令及其参数;
  • SLOWLOG RESET: 清空当前记录的慢操作。

10 更多参数

10.1 AOF 相关参数

默认情况下,Redis 采取异步策略生成数据快照文件,这在 Redis 出现异常或断电时,会导致上次快照以来的写操作丢失。
AOF(Append Only File)则更实时地将写操作数据记入 AOF 文件,减少数据丢失的风险。
AOF 可以和 RDB 同时启用。

  • appendonly no: AOF 的总开关
  • appendfilename "appendonly.aof": AOF 文件名称,而 AOF 的路径与 RDB 路径相同;
  • appendfsync everysec|always|no: 指定操作系统 flush 至磁盘文件的策略,每秒、实时、OS自己定;
  • no-appendfsync-on-rewrite no: 当 RDB 正在生成时,暂不进入 AOF 操作;
  • auto-aof-rewrite-percentage 100
  • auto-aof-rewrite-min-size 64mb
  • aof-load-truncated yes
  • aof-use-rdb-preamble no

10.2 事件通知相关参数

相关资料:notifications
Redis 具有发布/订阅机制,当某个键值产生事件时,订阅者将会收到通知。
格式:notify-keyspace-events <eventFlags>
每类事件用一个字符表示,<eventFlags> 是这样事件标识的序列,指定空串表示不关注任何事件。

10.3 碎片整理参数(实验性)

与操作系统磁盘碎片类似,Redis 反复增删键值之后,内存中会有大量碎片,影响之后申请大块连续的内存,需要在碎片达到一定程度时整理碎片。

  • activedefrag no|yes:默认未启用
  • active-defrag-ignore-bytes 100mb
  • active-defrag-threshold-lower 10
  • active-defrag-threshold-upper 100
  • active-defrag-cycle-min 25
  • active-defrag-cycle-max 75

10.4 集群相关参数(实验性)

Redis Cluster 是稳定的,但需要更多的生产环境去验证。

  • cluster-enabled no|yes: 普通 Redis 节点不能作为集群节点,除非打开了本开关;
  • cluster-config-file nodes-6379.conf: 集群节点的配置文件,由节点自动生成;
  • cluster-node-timeout 15000
  • cluster-slave-validity-factor 10
  • cluster-migration-barrier 1
  • cluster-require-full-coverage yes

10.5 集群 DOCKER/NAT 相关参数

  • cluster-announce-ip 10.1.1.5
  • cluster-announce-port 6379
  • cluster-announce-bus-port 6380

10.6 高级配置参数

  • hash-max-ziplist-entries 512
  • hash-max-ziplist-value 64
  • list-max-ziplist-size -2
  • list-compress-depth 0
  • set-max-intset-entries 512
  • zset-max-ziplist-entries 128
  • zset-max-ziplist-value 64
  • hll-sparse-max-bytes 3000
  • activerehashing yes
  • client-output-buffer-limit normal 0 0 0
  • client-output-buffer-limit slave 256mb 64mb 60
  • client-output-buffer-limit pubsub 32mb 8mb 60
  • client-query-buffer-limit 1gb
  • proto-max-bulk-len 512mb
  • aof-rewrite-incremental-fsync yes
  • lfu-log-factor 10
  • lfu-decay-time 1

Redis 服务器常用配置参数相关推荐

  1. 〖Python 数据库开发实战 - Redis篇⑤〗- Redis 的常用配置参数

    订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...

  2. Redis常用配置参数详解及查看修改命令

    目录 Redis常用配置参数 Redis配置参数查看命令 语法 举例 说明: Redis配置参数修改命令 语法 举例 说明: Redis常用配置参数 序号 配置项 说明 1 daemonize no ...

  3. JVM 常用配置参数(Java 8)

    日志 -XX:+PrintFlagsFinal,打印JVM所有参数的值 -XX:+PrintGC,打印GC信息 -XX:+PrintGCDetails,打印GC详细信息 -XX:+PrintGCTim ...

  4. Sybase常用配置参数

    Sybase常用配置参数 可以采用sp_configure查看SYBASE所有的配置,也可以在sybase根目录下面有"[库名].cfg"配置,该文件中用户没有更改的项全部显示值为 ...

  5. hpe服务器有哪些型号,HPE ProLiant DL80 Gen9 服务器 - 惠普服务器配置参数

    HPE ProLiant DL80 Gen9 服务器 - 惠普服务器配置参数 产品型号:HPE ProLiant DL80 Gen9 关注次数: 返回>> 满足成本敏感型中小型企业的基本I ...

  6. 服务器部署的参数文档,服务器怎么配置参数

    服务器怎么配置参数 内容精选 换一换 云堡垒机与RADIUS服务器对接,认证登录系统的用户身份.本小节主要介绍如何配置RADIUS域认证模式,并可对配置的RADIUS认证进行用户有效性测试.用户已获取 ...

  7. 怎么看服务器的内部性能参数,怎么看服务器详细配置参数

    怎么看服务器详细配置参数 内容精选 换一换 代码迁移工具进行代码迁移时,需要调用Linux下的rpm.deb等命令才能完成扫描和迁移相关任务,这些命令和逻辑必须在后端Linux运行.IDE插件只支持以 ...

  8. ml150服务器虚拟化,HPE ProLiant ML150 Gen9 服务器 - 惠普服务器配置参数

    HPE ProLiant ML150 Gen9 服务器 - 惠普服务器配置参数 产品型号:HPE ProLiant ML150 Gen9 关注次数: 返回>> 面向各种规模企业的经济型立式 ...

  9. Java Spring Data Redis实战与配置参数详解 application.properties...

    Redis作为开源分布式高并发缓存,使用范围非常广泛,主流互联网公司几乎都在使用. Java Spring Boot 2.0实战开发Redis缓存可以参考下面的步骤,Redis安装可以直接使用Linu ...

最新文章

  1. HTML-加速、再加速
  2. Python入门基础知识学什么?
  3. Android高级开发专题晋升班
  4. Randomize select algorithm 随机选择算法
  5. 有哪些好的刷题网站?2018年最受欢迎的编程挑战网站
  6. ES6语法---解构赋值
  7. 第一章练习题三级菜单
  8. linux oracle 服务重启过程
  9. PHP做好防盗链的基本思想 防盗链的设置方法
  10. 路由器下一跳地址怎么判断_Tracert命令详解,路由跟踪命令tracert命令怎么用?...
  11. 0527基于51单片机的防酒驾检测系统设计Proteus仿真
  12. FlashBuilder找不到所需要的AdobeFlashPlayer调试器版本的解
  13. 【OJ每日一练】1021 - 细菌个数
  14. 携程 Apollo 配置中心 | 学习笔记(七) | 如何将配置文件敏感信息加密?
  15. 深度学习入门(转)(备用)
  16. RocketMQ源码解析-Broker部分之Broker启动过程
  17. css 超出添加滚动条并隐藏滚动条
  18. Unity 获取鼠标点击图片时 获取点击位置的像素
  19. C语言开发工具(开发环境)
  20. jpg转换成PDF 如何将多张图片合成一个PDF文件

热门文章

  1. 产品经理负责制的诱惑与窘迫
  2. 【aviutl/lua】BPM打点
  3. 【物联家居】第四章:传输协议--mqtt配置与测试
  4. linux远程连接硬件加速,Linux中为谷歌Chrome浏览器启用视频硬件加速的方法
  5. 100道积分公式证明(41-50)
  6. kali 解压rar
  7. 十一、非参数检验:使用python进行卡方两样本独立性检验
  8. 爬虫晋江小说python_python 爬虫入门之爬小说
  9. 读书笔记:吉檀迦利:致我们无处安放的心灵
  10. Verbatim字符串