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


码哥使用 macOS 系统,使用 sudo sysctl -w kern.ipc.somaxconn=2048即可 。
timeout
timeout 60 单位是秒,如果在 timout 时间内客户端跟我没有数据交互(客户端不再向我发送任何数据),我将关闭该客户端连接 。
注意事项

  • 0 表示永不断开 。
  • timeout 对应源码 server.maxidletime
tcp-keepalive
tcp-keepalive 300 单位是秒,官方建议值是 300 。这是一个很有用的配置,实现 TCP 连接复用 。
用途
用于客户端与服务端的长连接,如果设置为非 0,则使用 SO_KEEPALIVE 周期性发送 ACK 给客户端,俗话就是用来定时向客户端发送 tcp_ack 包来探测客户端是否存活,并保持该连接 。不用每次请求都建立 TCP 连接,毕竟创建连接是比较慢的 。
3、常规配置
这些都是我的常规配置,比较通用,你必须了解 。你可以把这些配置写到一个特有文件中,其他节点可以使用 include /path/to/other.conf 配置来加载并复用该配置文件的配置 。
daemonize
配置daemonize yes表示使用守护进程的模式运行,默认情况下我是以非守护线程的模式运行(daemonize no),开启守护进程模式,会生成一个 .pid文件存储进程号 。
你也可以配置 pidfile /var/run/redis_6379.pid 参数来指定文件的生成目录,当关闭服务的时候我会自动删除该文件 。
loglevel
指定我在运行时的日志记录级别 。默认是 loglevel notice 。有以下几个选项可以配置 。
  • debug:会记录很多信息,主要用于开发和测试 。
  • verbose:许多用处不大的信息,但是比 debug 少,如果发现生产出现一些问题无从下手,可使用该级别来辅助定位 。
  • notice:生产一般配置这个级别 。
  • warning:只会记录非常重要/关键的的日志 。
logfile
指定日志文件目录,默认是 logfile "",表示只在标准控制台输出 。
需要注意的是,如果使用标准控制台输出,并且使用守护进程的模式运行,日志会发送到 /dev/null 。
databases
设置数据库数量,我的默认配置是 databases 16  。默认的数据库是 DB 0,使用集群模式的时候,database 只有一个,就是 DB 0 。
二、RDB 快照持久化
MySQL:“要怎么开启 RDB 内存快照文件实现持久化呢?”
RDB 快照持久化相关的配置,必须掌握,合理配置能我实现宕机快速恢复实现高可用 。
1、save
使用 save <seconds> <changes> 开启持久化,比如 save 60 100 表示 60 秒内,至少执行了 100 个写操作,则执行 RDB 内存快照保存 。
不关心是否丢失数据,你也可以通过配置 save "" 来禁用 RDB 快照保存,让我性能起飞,冲出三界外 。
默认情况的我会按照如下规则来保存 RDB 内存快照 。
  • 在 3600 秒 (一个小时) 内,至少执行了一次更改 。
  • 在 300 秒(5 分钟)内,至少执行了 100 个更改 。
  • 在 60 秒后,至少执行了 10000 个更改 。
也可以通过 save 3600 1 300 100 60 10000 配置来显示设置 。
2、
stop-writes-on-bgsave-error
MySQL:“bgsave 失败的话,停止接收写请求要怎么配置?”
默认配置为
stop-writes-on-bgsave-error yes,它的作用是如果 RDB 内存快照持久化开启并且最后一次 bgsave 失败的话就停止接收写请求 。
我通过这种强硬的方式来告知程序员数据持久化不正常了,否则可能没人知道 RDB 快照持久化出问题了 。
当 bgsave 后台进程能正常工作,我会自动允许写请求 。如果你对此已经有相关的监控,即使磁盘出问题(磁盘空间不足、没有权限等)的情况下依旧处理写请求,那么设置成 no 即可 。
3、rdbcompression
MySQL:“RDB 内存快照文件比较大,可以压缩么?”
我的默认配置是 rdbcompression yes,意味着对 RDB 内存快照文件中的 String 对象使用 LZF 算法做压缩 。这个非常有用,能大大减少文件大小,受益匪浅呀,建议你开启 。
如果你不想损失因为压缩 RDB 内存快照文件的 CPU 资源,那就设置成 no,带来的后果就是文件比较大,传输占用更大的带宽(要三思啊,老伙计) 。
4、rdbchecksum
默认配置是 rdbchecksum yes,从 5.0 版本开始,RDB 文件末尾会写入一个 CRC64 检验码,能起到一定的纠错作用,但是要丢失大约 10% 的性能损失,你可以设置成功 no 关闭这个功能来获得更快的性能 。


推荐阅读