NoSQL之Redis配置与优化

Redis 是高性能键值型 NoSQL 数据库 ,常用于缓存、消息队列、分布式锁、会话存储等场景。本文从安装配置 → 核心配置优化 → 性能优化 → 安全优化 → 持久化优化 → 集群 / 高可用全流程讲解,直接可用于生产环境。


一、Redis 基础安装(Linux)

bash

运行

复制代码
# 1. 安装依赖
yum install -y gcc gcc-c++ make

# 2. 下载解压(推荐稳定版 7.0+/6.2+)
wget https://download.redis.io/releases/redis-6.2.14.tar.gz
tar -zxvf redis-6.2.14.tar.gz
cd redis-6.2.14

# 3. 编译安装
make && make install PREFIX=/usr/local/redis

# 4. 复制配置文件
mkdir -p /usr/local/redis/etc
cp redis.conf /usr/local/redis/etc/

启动命令

bash

运行

复制代码
# 后台启动(生产必须用配置文件启动)
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf

二、Redis 核心配置(redis.conf)

1. 基础必改配置

ini

复制代码
# 允许后台运行
daemonize yes

# 绑定监听地址(生产不要用 0.0.0.0,除非有防火墙)
bind 127.0.0.1 192.168.1.100

# 默认端口
port 6379

# PID 文件路径
pidfile /var/run/redis_6379.pid

# 日志文件
logfile "/var/log/redis.log"

# 数据存放目录
dir /var/lib/redis

2. 安全配置(生产必备)

ini

复制代码
# 设置密码(强度要高)
requirepass 123456Abc!@#

# 禁止危险命令(防止误删)
rename-command CONFIG ""
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command KEYS ""

# 关闭危险的保护模式(公网环境必须配合密码+防火墙)
protected-mode no

3. 内存优化配置

ini

复制代码
# 最大可用内存(根据服务器配置,建议不超过物理内存的 50%)
maxmemory 8gb

# 内存淘汰策略(缓存场景必选)
maxmemory-policy allkeys-lru

# 内存碎片整理(自动开启)
activedefrag yes

淘汰策略说明

  • allkeys-lru:删除最近最少使用的 key(缓存首选
  • volatile-lru:只删除过期的最少使用 key
  • noeviction:不删除,直接报错(不推荐缓存使用)

三、Redis 性能优化(核心)

1. 内存优化

  1. 控制内存上限 :必须设置 maxmemory,防止 OOM 杀死进程
  2. 合理淘汰策略 :缓存用 allkeys-lru
  3. 避免大 key
    • 字符串 > 10KB、集合 > 10000 个元素都算大 key
    • 大 key 会导致阻塞、网络延迟、迁移失败
  4. 避免海量小 key :用 hash 结构聚合存储

2. 网络优化

ini

复制代码
# 关闭 TCP 延迟(提高响应)
tcp-nodelay yes

# 连接超时(秒)
timeout 300

# 最大客户端连接数
maxclients 10000

系统层面优化:

bash

运行

复制代码
# 调整文件句柄数
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf

3. CPU 优化

  1. 绑定 CPU(多核服务器)

ini

复制代码
# 绑定 CPU 核心,减少上下文切换
server_cpulist 0,1
  1. 避免单核过载,Redis 单线程模型,单核性能决定速度

4. 避免慢查询

  • 禁用 KEYS *HGETALLLRANGE 0 -1 等全量遍历命令
  • SCANHSCAN 代替

四、持久化优化(RDB + AOF)

Redis 提供两种持久化方式,生产推荐混合持久化

1. RDB 配置(快照)

ini

复制代码
save 3600 1    # 1小时 1个key变化
save 300 100   # 5分钟 100个key
save 60 10000  # 1分钟 10000个key

rdbcompression yes  # 压缩
rdbchecksum yes     # 校验

2. AOF 配置(日志)

ini

复制代码
appendonly yes       # 开启 AOF(生产必须开)
appendfilename "appendonly.aof"

# 刷盘策略(生产推荐 everysec)
# always:每次写入都刷盘(最安全、最慢)
# everysec:每秒刷盘(折中,推荐)
# no:由操作系统决定(最快)
appendfsync everysec

# AOF 重写
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

3. 持久化最佳实践

  • 缓存场景:关闭 RDB,AOF = everysec
  • 数据存储场景:开启混合持久化(Redis 4.0+ 默认开启)
  • 高写入场景:关闭自动持久化,通过脚本定时备份 RDB

五、安全优化(公网 / 生产必做)

  1. 设置强密码
  2. 禁用危险命令
  3. 防火墙限制 IP

bash

运行

复制代码
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="6379" accept'
  1. 不要使用 root 用户运行 Redis
  2. 修改默认端口(不要用 6379)
  3. 禁止外网直接访问

六、高可用与集群优化(大型业务)

1. 主从复制(读写分离)

  • 主节点写,从节点读
  • 配置 replicaof <master-ip> <port>
  • 从节点只读:replica-read-only yes

2. Redis Sentinel(哨兵)

  • 自动故障转移
  • 至少 3 个哨兵节点,防止脑裂

3. Redis Cluster(集群)

  • 分布式存储,突破单机内存限制
  • 官方推荐:3 主 3 从 最小配置
  • 自动分片、高可用

七、一键检查 Redis 状态命令

bash

运行

复制代码
# 连接
redis-cli -a 密码

# 查看内存
info memory

# 查看客户端连接
info clients

# 查看持久化
info persistence

# 查看慢查询
SLOWLOG GET 10

八、生产环境配置总结(直接复制)

ini

复制代码
daemonize yes
bind 127.0.0.1 192.168.1.100
port 6379
pidfile /var/run/redis_6379.pid
logfile "/var/log/redis.log"
dir /var/lib/redis

requirepass Redis@123456
rename-command CONFIG ""
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command KEYS ""

maxmemory 8gb
maxmemory-policy allkeys-lru
activedefrag yes

tcp-nodelay yes
timeout 300
maxclients 10000

appendonly yes
appendfsync everysec

总结

  1. 核心优化:内存限制 + 淘汰策略 + 避免大 key + 持久化策略
  2. 安全:密码 + 禁用危险命令 + 防火墙
  3. 性能:网络、CPU、慢查询、连接数优化
  4. 高可用:主从 + 哨兵 / 集群
相关推荐
u0109147602 小时前
CSS 中实现同类型兄弟元素悬停联动效果(如所有红色行同时高亮)
jvm·数据库·python
m0_640309302 小时前
MySQL如何备份非常大的数据库_mydumper多线程逻辑导出工具
jvm·数据库·python
m0_743623922 小时前
如何在Bootstrap中自定义Modal的弹出动画效果
jvm·数据库·python
2301_817672262 小时前
SQL如何实现分段式分组统计_使用CASE WHEN划分区间
jvm·数据库·python
qq_413847403 小时前
HTML怎么限制输入字符数_HTML input maxlength属性用法【详解】
jvm·数据库·python
liuyouzhang5 小时前
将基于Archery的web数据库审计查询平台封装为jdbc接口的可行性研究(基于AI)
前端·数据库
lThE ANDE7 小时前
最完整版Linux安装Redis(保姆教程)
linux·运维·redis
Meepo_haha8 小时前
配置 Redis
数据库·redis·缓存
u01091476010 小时前
CSS组件库如何快速扩展_通过Sass @extend继承基础布局
jvm·数据库·python