NoSQL之Redis配置与优化

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 时代三高难题
    1. 高并发读写:每秒上万次读写,关系库磁盘 I/O 顶不住
    2. 海量数据存储:亿级数据下查询效率暴跌
    3. 高可扩展:数据库无法像 Web 服务一样轻松加节点扩容

1.3 最佳架构组合

关系型数据库管事务与关系 ,Redis 管高速缓存与存储,两者互补,是现代互联网架构标配。


二、Redis 核心特性与优势

Redis(Remote Dictionary Server)是开源、C 语言编写、内存为主、支持持久化的 Key-Value NoSQL 数据库,是分布式系统必备组件。

2.1 Redis 五大核心优点

  1. 性能极高:读可达 11 万次 / 秒,写 8.1 万次 / 秒
  2. 数据类型丰富:String、List、Hash、Set、Sorted Set
  3. 支持持久化:内存数据落盘,重启不丢
  4. 操作原子性:所有命令原子执行,无并发冲突
  5. 主从复制:支持 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:绑定监听 IP
  • port 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:开启 AOF
  • appendfilename appendonly.aof:AOF 文件名
  • appendfsync everysec:每秒同步(默认推荐)
  • appendfsync always:每次修改同步(最安全)
  • appendfsync no:系统自动同步(最快)

4.4 安全与连接

  • requirepass 密码:设置访问密码
  • maxclients 10000:最大连接数
  • maxmemory 字节数:最大使用内存

4.5 主从复制配置

  • slaveof <主IP> <主端口>:从节点配置
  • masterauth <主密码>:主节点有密码时配置

五、Redis 命令工具与常用操作实战

5.1 五大核心工具

  1. redis-server:启动服务
  2. redis-cli:命令行客户端
  3. redis-benchmark:性能压测
  4. redis-check-rdb:修复 RDB
  5. redis-check-aof:修复 AOF

5.2 redis-cli 常用操作

bash

运行

复制代码
redis-cli              # 连接本地
redis-cli -h IP -p 端口 -a 密码  # 连接远程
ping                   # 测试连通性
info                   # 查看服务信息

5.3 Key 管理命令

  • keys *:查看所有 key
  • exists key:判断是否存在
  • del key:删除 key
  • type 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 100
  • auto-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 内存使用率优化

  1. 严禁使用 swap(会让 Redis 变慢百倍)
  2. 优先用Hash 结构,存储效率远高于 String
  3. 所有 key 必须设置过期时间
  4. 小内存实例可用 32 位版本节省空间

7.4 六大内存淘汰策略

内存满时自动删 key:

  1. volatile-lru:删过期 + 最少使用
  2. volatile-ttl:删即将过期
  3. volatile-random:随机删过期 key
  4. allkeys-lru:所有 key 里删最少使用(生产最推荐
  5. allkeys-random:随机删所有 key
  6. noeviction:不删,直接报错(默认)

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 生产安全加固

  1. 必须设强密码
  2. bind 绑定内网 IP,不暴露公网
  3. 修改默认 6379 端口
  4. 禁用危险命令:rename-command CONFIG ""

8.5 常见问题快速排查

  • 响应慢:查 swap、内存碎片、fork 阻塞
  • 内存暴涨:大 key、无过期、淘汰策略错误
  • 数据丢失:未开持久化、配置错误、硬盘故障
相关推荐
betazhou2 小时前
TDSQL-PG创建测试表并定时插入数据模拟生产
前端·javascript·数据库·tdsql·tdsql-pg
跃渊Yuey2 小时前
【MySQL】MySQL库的操作
数据库·mysql
weixin_408717772 小时前
PHP8.1新特性对AI开发帮助_JIT编译优势【解答】
jvm·数据库·python
瀚高PG实验室2 小时前
瀚高数据库安全版4.5.10及其以上版本使用pg_cron定时任务
服务器·数据库·瀚高数据库
小锋java12342 小时前
Redis可不仅仅是一个简单的KV缓存工具,在Java项目里还有八大场景妙用。。。
redis
2401_871696522 小时前
golang如何实现Trie前缀树_golang Trie前缀树实现解析
jvm·数据库·python
2401_887724502 小时前
Go语言怎么做HTTP连接池_Go语言HTTP连接池教程【基础】
jvm·数据库·python
yuanzhengme2 小时前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
qq_334563552 小时前
Redis怎样实现Session的分布式共享
jvm·数据库·python