两万字 redis.conf 7.0 配置和原理全解,生产王者必备

我是 redis,当程序员用指令 ./redis-server /path/to/redis.conf 把我启动的时候,第一个参数必须是redis.conf 文件的路径 。
这个文件很重要,就好像是你们的 DNA,它能控制我的运行情况,不同的配置会有不同的特性和人生,它掌握我的人生命运,控制着我如何完成高可用、高性能 。合理的配置能让我更快、更省内存,并发挥我最大的优势让我更安全运行 。
以下这些配置大家必知必会,需要大家掌握每个配置背后的技术原理,学会融合贯通并在生产中正确配置,解决问题 。避免出现技术悬浮,原理说的叭叭叭,配置像个大傻瓜 。
本文配置文件版本是 Redis 7.0 。
一、常规通用配置这些是我的常规配置,每个 Redis 启动必备参数,你一定要掌握,涉及到网络、模块插件、运行模式、日志等 。
1、MODULES
这个配置可以加载模块插件增强我的功能,常见的模块有 RedisSearch、RedisBloom 等 。关于模块加载可以参考【5.6 布隆过滤器原理与实战】章节集成布隆过滤器便是通过以下配置实现加载布隆过滤器插件 。
loadmodule /opt/App/RedisBloom-2.2.14/redisbloom.so2?.NETWORK
这部分都是与网络相关的配置,很重要滴,配置不当将会有安全和性能问题 。
bind
bind用于绑定本机的网络接口(网卡),注意是本机 。
每台机器可能有多个网卡,每个网卡都有一个 IP 地址 。配置了 bind,则表示我只允许来自本机指定网卡的 Redis 请求 。

MySQL:“bind 是用于限制访问你的机器 IP 么?”
非也,注意,这个配置指的并不是只有 bind 指定的 IP 地址的计算机才能访问我 。如果想限制指定的主机连接我,只能通过防火墙来控制,bind 参数不也能起到这个作用 。
举个例子:如果我所在的服务器有两个网卡,每个网卡有一个 IP 地址,IP1,IP2 。
配置 bind IP1,则表示只能通过这个网卡地址来的网络请求访问我,也可以使用空格分割绑定多个网卡 IP 。
我的默认配置是bind 127.0.0.1 -::1 表示绑定本地回环地址 IPv4 和 Ipv6 。- 表示当 ip 不存在也能启动成功 。
protected-mode
MySQL:网络世界很危险滴,你如何保证安全?
默认开启保护模式,如果没有设置密码或者没有 bind 配置,我只允许在本机连接我,其它机器无法连接 。
如果想让其它机器连接我,有以下三种方式 。
  1. 配置为 protected-mode no(不建议,地球很危险滴,防人之心不可无) 。
  2. protected-mode yes,配置 bind 绑定本机的 IP 。
  3. protected-mode yes,除了设置 bind 以外,还可以通过 requirepass magebyte设置密码为 magebyte,让其他机器的客户端能使用密码访问我 。
bind、protected-mode、requirepass 之间的关系
  • bind:指定的是我所在服务器网卡的 IP,不是指定某个可以访问我的机器 。
  • protected-mode:保护模式,默认开启,如果没有设置密码或者 bind IP,我只接受本机访问(没密码+保护模式启动=本地访问) 。
  • requirepass,Redis 客户端连接我通行的密码 。
如果参数设置为bind 127.0.0.1 -::1,不管 protected-mode是否开启,只能本机用 127.0.0.1 连接,其他外机无法连接 。
在生产环境中,为了安全,不要关闭 protected-mode,并设置 requirepass 参数配置密码和 bind 绑定机器的网卡 IP 。
port 6379
用于指定我监听的客户端 socket 端口号,默认 6379 。设置为 0 则不会监听 TCP 连接,我想没人设置为 0 吧 。
tcp-backlog 511
用于在 linux 系统中控制 TCP 三次握手已完成连接队列(完成三次握手后)的长度,如果已完成连接队列已经满则无法放入,客户端会报read timeout或者connection reset by peer的错 。
MySQL:“在高并发系统中这玩意需要调大些吧?”
是的,我的默认配置是 511,这个配置的值不能大于 Linux 系统定义的
/proc/sys/net/core/somaxconn 值,Linux 默认的是 128 。
所以我在启动的时候你会看到这样的警告:WARNING: The TCP backlog setting of 511 cannot be enforced because kern.ipc.somaxconn is set to the lower value of 128.
当系统并发量大并且客户端速度缓慢的时候,在高并发系统中,需要设置一个较高的值来避免客户端连接速度慢的问题 。
需要分别调整 Linux 和 Redis 的配置 。
建议修改为 2048 或者更大,Linux 则在 /etc/sysctl.conf中添加net.core.somaxconn = 2048配置,并且在终端执行 sysctl -p即可 。


推荐阅读