一,持久化配置
Redis 的持久化虽然可以保证数据安全,但是也会带来额外数据开销,因此持久化请遵守下列建议
- 用来做缓存的Redis实例尽量不要开启持久化功能
- 建议关闭RDB持久化功能,使用AOF持久化
- 利用脚本定期在slave节点做RDB,实现数据备份
- 设置合理的rewrite阈值,避免频繁的
bgrewrite - 配置
no-appendsyn-on-rewrite=yes,禁止在rewrite期间做AOF,避免因AOF导致的阻塞

部署有关建议:
- Redis实例的物理机要预留足够内存,应对fork和rewrite
- 单个Redis实例内存上限不要太大,例如4G或8G,可以加快fork的速度,减少主从同步,数据迁移的压力
- 不要与cpu密集型应用部署在一起
- 不要与高硬盘负载应用一起部署,例如:数据库,消息队列
二,慢查询
慢查询:在 Redis 中执行时间耗时超过某个阈值的命令叫慢查询。
慢查询的阈值可以通过配置指定:
slowlog-log-slower-than:慢查询阈值,单位是微秒。默认是10000,建议是1000
慢查询会被放入慢查询日志中,日志的长度有上限,可以通过配置指定:
slowlog-max-len:慢查询日志(本质是一个队列)的长度。默认是128,建议1000
查看慢查询日志列表:
slowlog len:查询慢查询日志长度slowlog get [n]:读取n条慢查询日志slowlog reset:清空慢查询列表

RESP 客户端提供了慢查询日志

三,命令以及安全配置
Redis 会绑定在0.0.0.0:6379,这样会将 Redis 服务暴露到公网上,而 Redis 如果没有做身份认证,会出现严重的安全漏洞,漏洞重现方式:Redis 未授权访问配合 SSH key 文件利用分析 - 腾讯云开发者社区 - 腾讯云 (tencent.com)
漏洞出现的核心问题有以下几点:
- Redis未设置密码
- 利用了Redis的
config set命令动态修改Redis配置 - 使用了Root账号权限启动Redis
为了避免这样的漏洞,这里给出一些建议:
-
Redis 一定要设置密码
-
禁止线上使用下面命令:
keys,flushall,flushdb,config set等命令。可以利用rename-command禁用-
在
redis.conf中配置rename-command config 12efwadaw将 config 命令替换成了 12efwadaw
-
-
bind:限制网卡,禁止外网网卡访问
-
开启防火墙
-
不要使用 Root 账户启动 Redis
-
尽量不要使用默认的 Redis 端口
四,内存配置
4.1 内存状态分析
当 Redis 内存不足时,可能导致 Key 频繁被删除,响应时间变得很长,QPS 不稳定等问题,当内存使用率达到 90% 以上就需要我们警惕,并快速定位到内存占用的问题。

Redis 提供了一些命令,可以查看到 Redis 目前的内存分配状态:
info memorymemory xxx

4.2 内存缓冲区配置
内存缓冲区常见有三种:
-
复制缓冲区:主从复制的
repl_backlog_buf,如果太小可能导致频繁的全量复制,影响性能。通过repl_backlog_size来设置,默认是 1mb -
AOF 缓冲区:AOF 刷盘之前的缓存区,AOF 执行 rewrite 的缓冲区。无法设置容量上限
-
客户端缓冲区:分为输入缓冲区和输出缓存,输入缓冲区最大 1G 且不能设置,输出缓冲区可以设置。
