简介
1. 网上虽然关于redis参数介绍的文章有很多,但都语焉不详,甚至大多是无脑复制来的
2. 本篇博客希望能详细地,通俗地给大家讲明白那些晦涩难懂的参数配置,简单的就不再啰嗦
3. 我用的redis版本是 redis-7.0.4
目前详细列出的参数列表如下
1. daemonize 是否以守护进程的方式启动redis
2. hz 表示Redis执行定期任务的频率
3. dynamic-hz 可根据客户端连接数动态调整hz的值,需Redis 5.0或以上
4. protected-mode 是否保护模式(是否只允许本机连接该redis)
1. daemonize 是否以守护进程的方式启动redis
这个变量在redis配置文件 redis.conf 中如下所示
注释说得也很清楚:默认情况下redis不是以守护进程的模式运行。如果把该变量的值设置为yes,redis将会把进程的pid(进程号)写到 /var/run/redis.pid,该值由配置变量 pidfile指定
先简单解释下守护进程(daemon),守护进程是linux中后台运行的进程,执行过程中打印的信息不显示在终端,完全不受任何终端影响
linux 系统,在终端上默认开启的进程会受到这个终端的影响,如果终端退出,进程会收到SIGHUP信号,默认处理是关闭进程。如果在终端上按下 "Ctrl + c" 组合键,进程会收到SIGINT信号,默认处理也是关闭进程
综上:把 daemonize 的值配置成yes,那么redis会以守护进程的方式启动,完全不受终端的影响,打印信息也不会输出到终端上,非常推荐
2. hz 表示Redis执行定期任务的频率
这个变量在redis配置文件redis.conf中的如下所示
前面还有其他注释,空间不足就不展示了。该变量表Redis执行后台任务的频率,用于计算LRU信息并清除过期key,关闭超时的客户端连接,执行RDB或AOF持久化相关操作,更新统计信息等等。这些定期任务是Redis服务正常运行的保障,它们的执行频率由hz参数的值指定,默认为10,即每秒执行10次。
举例:主动清除过期key的执行过程如下
1. 从设置了过期时间的key的集合中随机检查20个key。
2. 删除检查中发现的所有过期key。
3. 如果检查结果中25%以上的key已过期,则重新开启新一轮任务。
hz的取值范围为1~500。增大hz参数的值会提升各项定期任务的执行频率,超时处理会更加精准。但也会提高Redis服务的CPU使用率。默认值10在一般情况下已经可以满足需求,如果业务场景对于某些定期任务的执行频率有很高的要求,您可以尝试在100以内调整参数值。
将hz的值增加到100以上对CPU使用率有相对较大的影响,请谨慎操作
3. dynamic-hz 可根据客户端连接数动态调整hz的值,需Redis 5.0或以上
该变量在redis配置文件redis.conf中的如下所示
上面的 hz 参数用于指定Redis定期任务的执行频率,这些任务包括关闭超时的客户端连接、主动清除过期key等。
当定期任务的执行频率为一个固定值时,容易产生以下问题:
- 如果该值过小,在超时的客户端连接数较多或过期key较多等情况下,资源无法被及时整理回收,可能影响Redis服务的性能甚至导致服务崩溃。
- 如果该值过大,定期任务将会消耗过多的CPU资源,同样可能影响Redis服务的稳定性。
为了平衡Redis的CPU使用率和响应及时性,Redis 5.0版本新增了dynamic-hz参数,并分离了实际hz(hz)和已设置的hz(configured_hz)。
dynamic-hz 的可选值为yes
和no
,分别代表开启动态hz和关闭动态hz,默认值为yes
。当动态hz开启时,您设置的hz参数的值,即configured_hz,将作为基线值,而Redis服务中的实际hz值会在基线值的基础上根据已连接到Redis的客户端数量自动调整,连接的客户端越多,实际hz值越高,Redis执行定期任务的频率就越高
4. protected-mode 是否保护模式(是否只允许本机连接该redis)
该变量在redis配置文件redis.conf中的如下所示
翻译如下:protected-mode 是一个安全保护层,用于避免redis实例被互联网上的访问和使用。
保护模式打开时还有以下要求:1)没有使用 "bind"选项绑定一个地址,2)没有使用 "requirepass"选项设置密码
在保护模式下,redis实例仅仅接受 127.0.0.1 和 ::1的客户端连接
默认 protected-mode 的值为yes,即开启保护模式
注释已经很详细了,我们总结下:
如果想开启保护模式,即只允许本机的客户端才能访问,需同时满足一下三个配置
1. 配置选项 protected-mode 的值为yes
2. 不配置选项 bind
3. 不配置选项 requirepass
上面三个条件只要有一个不满足,保护模式就开启不了
有一个例外,如果你把bind选项的值设置为127.0.0.1,那么也只能本机才能连接该redis实例