redis
2026-01-18 15:52:07 0 举报
AI智能生成
redis思维导图
作者其他创作
大纲/内容
概念
非关系型数据库 (key:value 键值对),数据是写在内存中的
支持数据的持久化,周期性的将内存中的数据刷入到磁盘中 (备份)
RDB
工作原理:在某个时间点将内存中所有数据生成一个二进制快照文件(dump.rdb)
备份方式:
1.手动触发:在命令行输入save
2.自动触发,修改配置文件配置文件:save 900 1 # 900秒内至少1个key变化
save 300 10 # 300秒内至少10个key变化
save 60 10000 # 60秒内至少10000个key变化
save 300 10 # 300秒内至少10个key变化
save 60 10000 # 60秒内至少10000个key变化
特点:
二进制格式:文件紧凑,恢复速度快
时间点快照:可能会丢失最后一次快照后的数据
AOF
工作原理:写操作日志,记录每个写的命令,已文本协议格式追加到文件末尾
*3 ←数组有3个元素
$3 ←第一个元素的长度是3个字节
set ←命令名称(3个字符)
$2 ←第二个元素的长度是2个字节
aa ←命令名称(2个字符)
$2 ←第三个元素的长度是2个字节
bb ←命令名称(2个字符)
$3 ←第一个元素的长度是3个字节
set ←命令名称(3个字符)
$2 ←第二个元素的长度是2个字节
aa ←命令名称(2个字符)
$2 ←第三个元素的长度是2个字节
bb ←命令名称(2个字符)
AOF重写方式:
手动触发:在命令行输入BGREWRITEAOF
自动触发:修改配置文件:auto-aof-rewrite-percentage 100 # 增长100%时触发
auto-aof-rewrite-min-size 64mb # AOF文件最小64MB
auto-aof-rewrite-min-size 64mb # AOF文件最小64MB
特点:
安全性高
文件体积大,磁盘空间需求大
恢复速度慢
单进程,使用一颗CPU (5版本以后支持多进程)
应用场景
关系型数据库的缓存
可做消息队列
数据结构
字符串类型 (String)
特点:
redis对基本的数据类型
一个key对应一个值
可以存储任何数据(文本、数字、图片等),最大容量512M,值可以是字符串、整数或者浮点数
应用场景:
缓存HTML片段,用户信息
计数器(文章阅读量、点赞数)
哈希 (Hash)
是一个string类型的field和value的映射表
存储实例:user01:{
"name":"张三",
"age":30,
}
"name":"张三",
"age":30,
}
哈希应用场景
存储对象
用户属性
商品信息
配置信息
列表 (List)
特点:
是一个简单的字符串列表,按照插入顺序排序
列表中的数据是有序的,并且允许有重复的值
可以双向操作
从列表的左端(头部)添加/删除元素(先进后出:lpush、lpop
存储过程:LPUSH queue A # [A]
LPUSH queue B # [B, A] ← B在头部,A在尾部
LPUSH queue C # [C, B, A] ← C在头部,A在尾部
LPOP queue # 返回C(最早插入的),列表变为[A, B]
LPOP queue # 返回B,列表变为[A]
LPOP queue # 返回A(最后插入的),列表变为[]
LPUSH queue B # [B, A] ← B在头部,A在尾部
LPUSH queue C # [C, B, A] ← C在头部,A在尾部
LPOP queue # 返回C(最早插入的),列表变为[A, B]
LPOP queue # 返回B,列表变为[A]
LPOP queue # 返回A(最后插入的),列表变为[]
从列表右端(尾部)添加/删除元素(后进先出):rpush、rpop
存储过程:RPUSH queue A # [A]
RPUSH queue B # [A, B]
RPUSH queue C # [A, B, C]
RPOP queue # 返回C,列表变为[B, A]
RPOP queue # 返回B,列表变为[A]
RPOP queue # 返回A,列表变为[]
RPUSH queue B # [A, B]
RPUSH queue C # [A, B, C]
RPOP queue # 返回C,列表变为[B, A]
RPOP queue # 返回B,列表变为[A]
RPOP queue # 返回A,列表变为[]
列表应用场景
消息队列
最新消息
历史记录
集合 (Set)
特点:
支持集合运算(交集、并集等)
集合中的数据是无序的,并且允许有重复的值
有序集合(Sorted Set)
特点:
集合中的数据是有序的,并且不允许有重复的值
有序集合中的每个元素都会关联一个double类型的分数,redis通过该分数来为集合中的成员进行从小到大的排序。
应用场景:排行榜系统
集群
主从复制
一主一从或者一主多从,最少需要2节点
单向复制:只能从主节点复制到从节点
读写分离:主节点只负责写,从节点只负责读
工作流程:
从节点启动
↓
发送 SLAVEOF 命令
↓
主节点执行 BGSAVE 生成 RDB 快照
↓
主节点将 RDB 文件发送给从节点
↓
从节点清空旧数据,加载 RDB (全量同步)
↓
主节点将期间的写命令缓存到复制缓冲区
↓
主节点发送缓冲区的写命令给从节点 (增量同步)
↓
进入增量复制模式,持续同步新命令 (持续同步)
↓
发送 SLAVEOF 命令
↓
主节点执行 BGSAVE 生成 RDB 快照
↓
主节点将 RDB 文件发送给从节点
↓
从节点清空旧数据,加载 RDB (全量同步)
↓
主节点将期间的写命令缓存到复制缓冲区
↓
主节点发送缓冲区的写命令给从节点 (增量同步)
↓
进入增量复制模式,持续同步新命令 (持续同步)
redi-sentinel(哨兵)
Redis Sentinel 是Redis官方提供的高可用解决方案,用于监控Redis主从实例,并在主节点故障时自动进行故障转移。
特点:
监控:持续检查主从节点是否正常运行
自动故障转移:主节点故障时,自动将一个从节点升级为主节点
配置提供者:为客户端提供当前可用的主节点地址
支持VIP:在触发主从切换时,将vip也切换至新的redis节点
节点需求:
最少为3节点
sentinel节点设置为奇数
避免脑裂问题
sentinel使用少数服从多数的投票机制做决策
奇数节点可以确保投票能产生明确结果,偶数节点可能会出现平票
哨兵选举新主流程:
使用场景:小量数据,高可用
redis-cluster集群
Redis Cluster 是Redis官方提供的分布式解决方案,支持数据分片(sharding)、高可用和水平扩展。
特点:
数据分片:数据自动分散在多个节点上
高可用:主从复制 + 自动故障转移
无中心架构:每个节点都保存集群状态
客户端路由:客户端直接连接正确的节点
节点需求:
Redis Cluster最少需要6个节点(3主3从):
3个主节点(负责数据存储和写操作)
3个从节点(每个主节点对应一个从节点,用于高可用)
存储原理:
Hash Slot(哈希槽):数据存储在Hash Slot(哈希槽)上,一共16384个槽位,通过算法平均分在三个主节点上
当写入数据时,会进行取余计算,存储到分配在某个主节点上的槽位中
容错分析:三主三从
1.挂掉任意1个从节点:无影响,集群正常工作
2.挂掉任意1个主节点:对应的从节点会自动升级为主节点,集群正常工作,实现自动故障转移
3.挂掉1主1从(同一分片):存储在该主从节点上的数据不可用,集群状态为fail,需要人工干预修复
4.挂掉一主一从(不同分片):集群正常工作,但是集群的高可用性降低(运行受短暂影响)
5.挂掉2个从节点:集群正常工作,但是集群的高可用性降低(运行几乎无影响)
6.挂掉2个主节点:存活的主节点数<50%,集群不可用
使用场景:大量数据,高并发
0 条评论
下一页