一、Redis 基础认知
1.1 关系型数据库 vs NoSQL
- 关系型数据库:结构化二维表、支持 SQL、强事务一致性;代表:MySQL、Oracle、SQL Server。
- NoSQL(Not Only SQL):非关系型、分布式、易横向扩展、高并发读写;代表:Redis、MongoDB、HBase。
- NoSQL 诞生背景 :解决 Web2.0 三高问题 ------高并发读写 、海量数据存储 、高可扩展高可用。
1.2 Redis 核心定义
Redis(Remote Dictionary Server)是开源、C 语言编写、基于内存、支持持久化的 Key-Value 型 NoSQL 数据库,单进程模型,支持多数据结构,读写性能极高(读 11 万次 / 秒、写 8 万次 / 秒)。
1.3 Redis 核心优势
- 高性能内存读写,低延迟
- 支持 5 种核心数据类型:String、Hash、List、Set、ZSet
- 内置 RDB+AOF 双持久化,数据不丢失
- 支持主从复制、集群、事务与原子操作
- 支持数据备份与高可用架构
二、Redis 安装部署(全代码)
2.1 环境准备
bash
运行
# 关闭防火墙与SELinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 安装依赖
yum -y install gcc gcc-c++ zlib-devel make
2.2 编译安装
bash
运行
# 上传并解压源码包
tar -zxvf redis-4.0.9.tar.gz
cd redis-4.0.9/
# 编译(报错则用make MALLOC=libc)
make
# 报错修复
make clean && make distclean
make MALLOC=libc
# 指定路径安装
make PREFIX=/usr/local/redis install
# 软链接,方便全局调用
ln -s /usr/local/redis/bin/* /usr/local/bin/
2.3 一键配置服务
bash
运行
# 进入工具目录执行安装脚本
cd utils/
./install_server.sh
# 按回车默认配置即可
# 配置文件:/etc/redis/6379.conf
# 日志文件:/var/log/redis_6379.log
# 数据目录:/var/lib/redis/6379
# 可执行文件:/usr/local/redis/bin/redis-server
# 客户端:/usr/local/redis/bin/redis-cli
2.4 服务管理命令
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
# 查看端口监听
netstat -lnupt | grep redis
ss -tnlp | grep redis
三、Redis 核心配置(6379.conf 全参数详解)
bash
运行
vim /etc/redis/6379.conf
3.1 基础网络配置
bash
运行
# 监听IP(多IP用空格分隔)
bind 127.0.0.1 192.168.10.161
# 端口
port 6379
# 保护模式(生产关闭)
protected-mode no
# 客户端闲置超时关闭(0为不关闭)
timeout 300
3.2 守护进程与日志
bash
运行
# 后台运行
daemonize yes
# PID文件路径
pidfile /var/run/redis_6379.pid
# 日志级别:debug/verbose/notice/warning
loglevel notice
# 日志文件
logfile /var/log/redis_6379.log
3.3 数据存储配置
bash
运行
# 数据文件存放目录
dir /var/lib/redis/6379
# RDB文件名
dbfilename dump.rdb
# AOF文件名
appendfilename appendonly.aof
3.4 安全配置
bash
运行
# 连接密码
requirepass 123456
# 主从认证密码(从库连接主库用)
masterauth 123456
3.5 客户端限制
bash
运行
# 最大连接数(0不限制)
maxclients 10000
3.6 内存配置
bash
运行
# 最大使用内存
maxmemory 1G
# 内存淘汰策略
maxmemory-policy allkeys-lru
3.7 持久化配置
bash
运行
# RDB自动快照策略
save 900 1
save 300 10
save 60 10000
# RDB压缩
rdbcompression yes
# 开启AOF
appendonly yes
# AOF同步策略
appendfsync everysec
# AOF自动重写阈值
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 重写时不阻塞新写入
no-appendfsync-on-rewrite yes
四、Redis 命令工具使用
4.1 redis-cli 客户端命令
bash
运行
# 本地连接
redis-cli
# 远程连接
redis-cli -h 192.168.10.161 -p 6379
# 密码认证
127.0.0.1:6379> AUTH 123456
# 测试连通性
127.0.0.1:6379> PING
PONG
4.2 帮助命令
bash
运行
# 查看某类命令
help @list
help @string
# 查看单个命令用法
help set
help get
4.3 redis-benchmark 性能测试
bash
运行
# 基础测试:100并发、10万请求
redis-benchmark -h 192.168.10.161 -p 6379 -c 100 -n 100000
# 测试100字节数据读写
redis-benchmark -d 100 -q
# 只测试set和lpush
redis-benchmark -t set,lpush -n 100000 -q
4.4 持久化文件修复工具
bash
运行
# 修复AOF文件
redis-check-aof --fix appendonly.aof
# 修复RDB文件
redis-check-rdb --fix dump.rdb
五、Redis 常用操作命令(全)
5.1 基础 Key-Value 操作
bash
运行
# 设值
set teacher zhanglong
# 取值
get teacher
# 设值并指定过期时间10秒
set user tom EX 10
5.2 Key 管理命令
bash
运行
# 查看所有key
KEYS *
# 查看以v开头的key
KEYS v*
# 查看v开头+1位字符
KEYS v?
# 查看v开头+2位字符
KEYS v??
# 判断key是否存在
exists teacher
# 删除key
del v5
# 查看key类型
type k1
# 重命名(覆盖)
rename v22 v2
# 安全重命名(目标存在则不执行)
renamenx v2 teacher
# 查看key数量
dbsize
5.3 多数据库操作
bash
运行
# 切换到10号库(默认0-15共16个库)
select 10
# 移动key到1号库
move k1 1
# 清空当前库
FLUSHDB
# 清空所有库(高危)
FLUSHALL
六、Redis 持久化(RDB + AOF)
6.1 RDB 持久化
-
原理:定时将内存数据生成二进制快照写入磁盘。
-
触发方式
bash
运行
# 手动阻塞触发(生产禁用) save # 后台子进程触发(推荐) bgsave -
优点:文件小、恢复快、适合全量备份
-
缺点:宕机丢失最后一次快照后数据、fork 子进程可能阻塞
6.2 AOF 持久化
-
原理:记录所有写操作日志,重启时重放命令恢复数据。
-
三种同步策略
always:每次写都同步(最安全、最慢)everysec:每秒同步(折中,默认)no:操作系统控制同步(最快、不安全)
-
AOF 重写
bash
运行
# 手动重写 bgrewriteaof -
优点:数据安全性高、日志可读、可修复
-
缺点:文件大、恢复比 RDB 慢
6.3 持久化选型建议
- 追求性能、可容忍少量丢失:只用 RDB
- 追求数据安全、不丢失:RDB+AOF 同时开启
- 重启加载优先级:AOF > RDB
七、Redis 内存优化与配置
7.1 内存状态查看
bash
运行
127.0.0.1:6379> info memory
核心指标:
used_memory:Redis 实际使用内存used_memory_rss:系统分配给 Redis 的物理内存mem_fragmentation_ratio:内存碎片率(>1.5 偏高,<1 触发 Swap)
7.2 内存碎片解决
- 碎片率 > 1.5:重启 Redis (先执行
shutdown save) - 碎片率 < 1:增加物理内存或降低 maxmemory
- 更换内存分配器:jemalloc/tcmalloc(编译指定)
7.3 内存使用优化
-
优先使用Hash 结构存储对象,减少 Key 数量
-
所有 Key 设置过期时间
bash
运行
expire user 60 pexpire user 60000 -
控制 Value 大小,避免大 Key(>10KB 视为大 Key)
7.4 内存淘汰策略(maxmemory-policy)
volatile-lru:淘汰设置了过期时间的最近最少使用 keyvolatile-ttl:淘汰即将过期的 keyvolatile-random:随机淘汰过期 keyallkeys-lru:所有 key 中淘汰最少使用(生产推荐)allkeys-random:随机淘汰所有 keynoeviction:不淘汰,写满直接报错(默认)
八、Redis 安全配置
8.1 设置密码
bash
运行
# 临时生效(重启失效)
config set requirepass 123456
# 永久生效(改配置文件)
vim /etc/redis/6379.conf
requirepass 123456
8.2 密码连接
bash
运行
# 方式1:连接时带密码
redis-cli -h 192.168.10.161 -p 6379 -a 123456
# 方式2:连接后认证
redis-cli
127.0.0.1:6379> AUTH 123456
8.3 安全关闭
bash
运行
redis-cli -a 123456 shutdown
九、Redis vs Memcached(补充知识点)
表格
| 对比项 | Redis | Memcached |
|---|---|---|
| 性能 | 单核性能强,小数据更快 | 多核利用率高,大数据 (>100k) 更快 |
| 数据结构 | 支持 5 种类型,可复杂操作 | 仅支持简单 Key-Value |
| 持久化 | 支持 RDB+AOF | 不支持,重启丢失 |
| 内存管理 | 简单 malloc/free | Slab Allocation,无碎片 |
| 分布式 | 服务端集群 Redis Cluster | 客户端一致性哈希实现 |
| 单 Value 大小 | 最大 512MB | 最大 1MB |
| 适用场景 | 高安全、复杂业务、缓存 + 持久化 | 纯缓存、多读少写、大数据量 |
十、生产环境优化建议(补充知识点)
- 关闭透明大页 THP :
echo never > /sys/kernel/mm/transparent_hugepage/enabled - 设置最大打开文件数 :
ulimit -n 65535 - 禁用 swap:避免内存交换导致性能暴跌
- 单实例内存控制:不超过 10GB,大内存用集群分片
- 避免大 Key:大 Key 导致网络阻塞、超时、主从同步延迟
- 定期备份:crontab 定时拷贝 dump.rdb 到异地存储
- 监控告警:监控内存使用率、连接数、淘汰 key 数、响应延迟
十一、总结
Redis 是高性能内存数据库,配置核心 在于网络、安全、持久化、内存四大块;优化核心 在于内存管理、淘汰策略、持久化选型、大 Key 治理。生产环境需结合业务场景平衡性能 与数据安全,配合主从、集群实现高可用与横向扩展。