NoSQL 之 Redis 配置与优化全解:Redis 核心技术
一、Redis 基础认知:关系型与非关系型数据库对比
学习 Redis 之前,必须先理清关系型数据库 与NoSQL 非关系型数据库的本质区别,这是理解 Redis 定位与价值的前提。
1.1 关系型数据库
关系型数据库基于二维表结构,用 SQL 统一操作,强调整齐划一、事务安全。
- 主流产品:MySQL、Oracle、SQL Server、DB2
- 特点:结构化、事务 ACID、支持复杂关联查询、强一致性
- 短板:高并发扛不住、海量数据查询慢、横向扩展难
1.2 非关系型数据库(NoSQL)
NoSQL = Not Only SQL ,是关系型之外数据库的统称,专为高并发、海量数据、灵活扩展而生。
- 主流产品:Redis、MongoDB、HBase、CouchDB
- 特点:非结构化、分布式、易水平扩展、高性能、数据模型灵活
- 诞生背景:解决 Web2.0 时代三高难题
- 高并发读写:每秒上万次读写,关系库磁盘 I/O 顶不住
- 海量数据存储:亿级数据下查询效率暴跌
- 高可扩展:数据库无法像 Web 服务一样轻松加节点扩容
1.3 最佳架构组合
关系型数据库管事务与关系 ,Redis 管高速缓存与存储,两者互补,是现代互联网架构标配。
二、Redis 核心特性与优势
Redis(Remote Dictionary Server)是开源、C 语言编写、内存为主、支持持久化的 Key-Value NoSQL 数据库,是分布式系统必备组件。
2.1 Redis 五大核心优点
- 性能极高:读可达 11 万次 / 秒,写 8.1 万次 / 秒
- 数据类型丰富:String、List、Hash、Set、Sorted Set
- 支持持久化:内存数据落盘,重启不丢
- 操作原子性:所有命令原子执行,无并发冲突
- 主从复制:支持 master-slave 备份与读写分离
2.2 Redis 最常用业务场景
- 热点数据缓存(核心用途)
- 用户 Session 会话共享
- 实时排行榜、点赞 / 计数
- 轻量消息队列
- 分布式锁
- 接口限流、熔断
- 实时数据分析
三、Redis Linux 安装部署
以 Redis 4.0.9 为例,提供可直接复制执行的完整安装流程。
3.1 安装依赖环境
bash
运行
dnf -y install tar gcc make
3.2 解压源码
bash
运行
tar xvzf redis-4.0.9.tar.gz
cd redis-4.0.9/
3.3 编译与安装
bash
运行
make
make PREFIX=/usr/local/redis install
ln -s /usr/local/redis/bin/* /usr/local/bin/
3.4 自动配置安装(install_server.sh)
bash
运行
cd utils/
./install_server.sh
一路回车使用默认配置:
- 端口:6379
- 配置文件:/etc/redis/6379.conf
- 日志:/var/log/redis_6379.log
- 数据目录:/var/lib/redis/6379
3.5 Redis 服务控制命令
bash
运行
/etc/init.d/redis_6379 start # 启动
/etc/init.d/redis_6379 stop # 停止
/etc/init.d/redis_6379 restart # 重启
/etc/init.d/redis_6379 status # 状态
3.6 验证安装
bash
运行
netstat -lnupt | grep redis
看到 6379 端口监听 即安装成功。
四、Redis 核心配置参数详解
配置文件:/etc/redis/6379.conf
4.1 基础配置
bind 127.0.0.1 192.168.10.161:绑定监听 IPport 6379:服务端口daemonize yes:后台运行logfile /var/log/redis_6379.log:日志路径timeout 300:客户端空闲超时关闭
4.2 RDB 持久化配置
dbfilename dump.rdb:RDB 文件名dir /var/lib/redis/6379:数据目录save 900 1:900 秒 1 个 key 改动则快照save 300 10:300 秒 10 个 key 改动则快照save 60 10000:60 秒 10000 个 key 改动则快照rdbcompression yes:开启 RDB 压缩
4.3 AOF 持久化配置
appendonly yes:开启 AOFappendfilename appendonly.aof:AOF 文件名appendfsync everysec:每秒同步(默认推荐)appendfsync always:每次修改同步(最安全)appendfsync no:系统自动同步(最快)
4.4 安全与连接
requirepass 密码:设置访问密码maxclients 10000:最大连接数maxmemory 字节数:最大使用内存
4.5 主从复制配置
slaveof <主IP> <主端口>:从节点配置masterauth <主密码>:主节点有密码时配置
五、Redis 命令工具与常用操作实战
5.1 五大核心工具
redis-server:启动服务redis-cli:命令行客户端redis-benchmark:性能压测redis-check-rdb:修复 RDBredis-check-aof:修复 AOF
5.2 redis-cli 常用操作
bash
运行
redis-cli # 连接本地
redis-cli -h IP -p 端口 -a 密码 # 连接远程
ping # 测试连通性
info # 查看服务信息
5.3 Key 管理命令
keys *:查看所有 keyexists key:判断是否存在del key:删除 keytype key:查看类型rename key newkey:重命名dbsize:key 数量flushdb:清空当前库flushall:清空所有库
5.4 多数据库操作
Redis 默认 16 个库(0~15),相互隔离:
bash
运行
select 10 # 切换到第10个库
move key 1 # 把key移动到库1
5.5 性能压测(redis-benchmark)
bash
运行
# 100并发、10万请求
redis-benchmark -h IP -p 6379 -c 100 -n 100000
# 测试100字节数据性能
redis-benchmark -h IP -p 6379 -q -d 100
# 只测set、lpush
redis-benchmark -t set,lpush -n 100000 -q
六、Redis 持久化:RDB 与 AOF 深度解析
Redis 数据默认在内存,持久化是防止重启丢失的关键。
6.1 RDB(快照持久化)
- 原理:定时把内存数据全量快照写入磁盘
- 优点:文件小、恢复快、备份简单、对业务影响小
- 缺点:宕机可能丢失最后一次快照后的数据
6.2 AOF(日志持久化)
- 原理:记录所有写命令,重启时重放恢复
- 优点:数据安全性极高、可读、支持重写瘦身
- 缺点:文件更大、恢复更慢、性能略低
6.3 RDB :AOF 对比
| 维度 | RDB | AOF |
|---|---|---|
| 数据安全 | 可能丢数据 | 最高(每秒同步) |
| 文件体积 | 小 | 大 |
| 恢复速度 | 极快 | 较慢 |
| 性能损耗 | 低 | 中 |
| 适用场景 | 大数据量、允许小丢数 | 核心数据、高可靠要求 |
6.4 AOF 重写机制
AOF 文件会越来越大,Redis 支持 BGREWRITEAOF 自动重写,去掉冗余命令,缩小文件。配置自动重写:
auto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mb
七、Redis 性能优化与内存管理
7.1 内存状态查看
bash
运行
redis-cli info memory
关键指标:
used_memory:Redis 实际使用内存used_memory_rss:系统分配内存mem_fragmentation_ratio:内存碎片率
7.2 内存碎片优化
- 碎片率 >1.5:碎片严重,可重启释放
- 碎片率 <1:内存不足,使用 swap,性能暴跌
- 解决方案:加内存、重启、使用 jemalloc 分配器
7.3 内存使用率优化
- 严禁使用 swap(会让 Redis 变慢百倍)
- 优先用Hash 结构,存储效率远高于 String
- 所有 key 必须设置过期时间
- 小内存实例可用 32 位版本节省空间
7.4 六大内存淘汰策略
内存满时自动删 key:
volatile-lru:删过期 + 最少使用volatile-ttl:删即将过期volatile-random:随机删过期 keyallkeys-lru:所有 key 里删最少使用(生产最推荐)allkeys-random:随机删所有 keynoeviction:不删,直接报错(默认)
7.5 生产配置建议
- 开 RDB:maxmemory = 物理内存 45%
- 关 RDB:maxmemory = 物理内存 95%
- 超大数据:使用集群分片
八、补充知识点
8.1 Redis 事务
支持简单事务:MULTI入队、EXEC执行、DISCARD取消,不支持回滚。
8.2 发布 / 订阅模式
用于实时消息推送:
PUBLISH 频道 消息SUBSCRIBE 频道
8.3 高可用体系
- 主从复制:读写分离
- 哨兵 Sentinel:自动故障转移
- Redis Cluster:分布式分片(16384 槽)
8.4 生产安全加固
- 必须设强密码
- bind 绑定内网 IP,不暴露公网
- 修改默认 6379 端口
- 禁用危险命令:
rename-command CONFIG ""
8.5 常见问题快速排查
- 响应慢:查 swap、内存碎片、fork 阻塞
- 内存暴涨:大 key、无过期、淘汰策略错误
- 数据丢失:未开持久化、配置错误、硬盘故障