服务端优化
一,持久化配置
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且不能设置,输出缓冲区可以设置。


浙公网安备 33010602011771号