一、Redis 核心概念
1.本质定位
- 开源、高性能、键值对(Key-Value)内存数据库
- 纯内存为主,可持久化到磁盘
- 单线程 + IO 多路复用,支撑极高并发
2.核心数据结构
- String :字符串、数字、计算器、分布式锁
- Hash:对象(如用户信息)
- List:列表、队列、栈
- Set:无序集合、去重、交集并集
- ZSet(Sorted Set):有序集合、排行榜、延时队列
- Stream:消息队列(5.0+,生产级 MQ)
- Geo:地理位置、附近的人
- HyperLogLog:基数统计(UV 统计)
3.单线程模型
- Redis 主线程处理命令是单线程
- 优点:无锁竞争、逻辑简单、延迟极低
- 注意:持久化、集群同步是后台线程,不阻塞主线程
4.IO 多路复用
- 用
select/epoll同时监听多个 socket - 一个线程就能抗几万连接,是 Redis 高性能关键
5.持久化机制(数据安全)
- RDB:定时快照,二进制文件,恢复快
- AOF:记录写命令日志,数据更安全
- 混合持久化(4.0+):RDB + AOF,兼顾速度与安全
6.高可用架构
- 主从复制:读写分离,数据备份
- 哨兵 Sentinel:自动故障转移,主节点挂了自动切从
- Redis Cluster:分布式集群,数据分片,水平扩容
7.内存淘汰策略
缓存满了自动删数据,常用:
allkeys-lru:删除最少使用的 key(生产缓存首选)volatile-lru:只删除带过期时间的noeviction:不删,直接报错(用于存储)
8.其他
- 事务:MULTI / EXEC / DISCARD
- 管道 Pipeline:批量执行命令,减少 IO
- 发布订阅 Pub / Sub:简单消息广播
- Lua 脚本:原子性执行复杂逻辑
二、Redis 部署(Linux CentOS 7+)
0.前置环境配置
bash
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0
# 内核优化(Redis 强制要求)
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
echo "net.core.somaxconn = 1024" >> /etc/sysctl.conf
sysctl -p
# 关闭透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
1.单机部署
1.1下载安装
bash
# 安装依赖
yum install -y gcc gcc-c++ make
# 下载源码
wget https://download.redis.io/releases/redis-8.6.2.tar.gz
tar -zxvf redis-8.6.2.tar.gz
cd redis-8.6.2
# 编译
make && make install
1.2准备配置文件
bash
mkdir -p /etc/redis /var/lib/redis /var/log/redis
cp redis.conf /etc/redis/6379.conf
1.3核心配置(精简)
bash
vim /etc/redis/6379.conf
修改一下项:
ini
bind 0.0.0.0
port 6379
daemonize yes
pidfile /var/run/redis_6379.pid
logfile "/var/log/redis/6379.log"
dir /var/lib/redis
requirepass 123456
appendonly yes
maxmemory 2gb
maxmemory-policy allkeys-lru
1.4启动 & 连接
bash
# 启动
redis-server /etc/redis/6379.conf
# 连接
redis-cli -p 6379 -a 123456
# 关闭
redis-cli -a 123456 shutdown
2.主从复制部署(一主一从)
- 主节点:192.168.1.10:6379
- 从节点:192.168.1.11:6379
从节点配置添加
ini
replicaof 192.168.1.10 6379
masterauth 123456
replica-read-only yes
启动从节点即可
查看主从状态:
bash
info replication
3.哨兵模式(Sentinel)高可用
实现主节点自动故障转移
配置 sentinel.conf
ini
port 26379
daemonize yes
logfile "/var/log/redis/sentinel.log"
sentinel monitor mymaster 192.168.1.10 6379 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
启动:
bash
redis-sentinel /etc/redis/sentinel.conf
4.Redis Cluster 集群部署(分片模式)
最少 6 个节点(3 主 3 从)
快速创建集群命令:
bash
# 创建集群
redis-cli --cluster create \
127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 \
127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 \
--cluster-replicas 1 -a 123456
查看集群状态:
bash
redis-cli -c -p 6379 -a 123456
cluster info
cluster nodes
三、常用运维命令
bash
# 查看内存
info memory
# 查看持久化
info persistence
# 手动RDB快照
bgsave
# 手动AOF重写
bgrewriteaof
# 清空所有库
flushall