网站Logo 苏叶的belog

服务端优化

wdadwa
2
2026-03-26

一,持久化配置

Redis 的持久化虽然可以保证数据安全,但是也会带来额外数据开销,因此持久化请遵守下列建议

  1. 用来做缓存的Redis实例尽量不要开启持久化功能
  2. 建议关闭RDB持久化功能,使用AOF持久化
  3. 利用脚本定期在slave节点做RDB,实现数据备份
  4. 设置合理的rewrite阈值,避免频繁的bgrewrite
  5. 配置no-appendsyn-on-rewrite=yes,禁止在rewrite期间做AOF,避免因AOF导致的阻塞

2953321-20240820191311145-1743645366.png

部署有关建议:

  1. Redis实例的物理机要预留足够内存,应对fork和rewrite
  2. 单个Redis实例内存上限不要太大,例如4G或8G,可以加快fork的速度,减少主从同步,数据迁移的压力
  3. 不要与cpu密集型应用部署在一起
  4. 不要与高硬盘负载应用一起部署,例如:数据库,消息队列

二,慢查询

慢查询:在 Redis 中执行时间耗时超过某个阈值的命令叫慢查询。

慢查询的阈值可以通过配置指定:

  • slowlog-log-slower-than:慢查询阈值,单位是微秒。默认是10000,建议是1000

慢查询会被放入慢查询日志中,日志的长度有上限,可以通过配置指定:

  • slowlog-max-len:慢查询日志(本质是一个队列)的长度。默认是128,建议1000

查看慢查询日志列表:

  • slowlog len:查询慢查询日志长度
  • slowlog get [n]:读取n条慢查询日志
  • slowlog reset:清空慢查询列表

2953321-20240820191311305-2053278617.png

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

2953321-20240820191311269-541236013.png

三,命令以及安全配置

Redis 会绑定在0.0.0.0:6379,这样会将 Redis 服务暴露到公网上,而 Redis 如果没有做身份认证,会出现严重的安全漏洞,漏洞重现方式:Redis 未授权访问配合 SSH key 文件利用分析 - 腾讯云开发者社区 - 腾讯云 (tencent.com)

漏洞出现的核心问题有以下几点:

  • Redis未设置密码
  • 利用了Redis的config set命令动态修改Redis配置
  • 使用了Root账号权限启动Redis

为了避免这样的漏洞,这里给出一些建议:

  • Redis 一定要设置密码

  • 禁止线上使用下面命令:keysflushallflushdbconfig set等命令。可以利用rename-command禁用

    • redis.conf中配置

      rename-command config 12efwadaw
      

      将 config 命令替换成了 12efwadaw

  • bind:限制网卡,禁止外网网卡访问

  • 开启防火墙

  • 不要使用 Root 账户启动 Redis

  • 尽量不要使用默认的 Redis 端口

四,内存配置

4.1 内存状态分析

当 Redis 内存不足时,可能导致 Key 频繁被删除,响应时间变得很长,QPS 不稳定等问题,当内存使用率达到 90% 以上就需要我们警惕,并快速定位到内存占用的问题。

2953321-20240820191311275-1565193258.png

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

  • info memory
  • memory xxx

2953321-20240820191311505-1290203890.png


4.2 内存缓冲区配置

内存缓冲区常见有三种:

  • 复制缓冲区:主从复制的repl_backlog_buf,如果太小可能导致频繁的全量复制,影响性能。通过repl_backlog_size来设置,默认是 1mb

  • AOF 缓冲区:AOF 刷盘之前的缓存区,AOF 执行 rewrite 的缓冲区。无法设置容量上限

  • 客户端缓冲区:分为输入缓冲区和输出缓存,输入缓冲区最大 1G 且不能设置,输出缓冲区可以设置。

2953321-20240820191311345-531797709.png

动物装饰