MD 更新:未知

分布式系统中的权衡问题(CAP)

概念

  • C(Consistency):所有节点看到的数据一致性
  • A(Availability):每次请求都能及时得到回应
  • P(Partiton Tolerance):网络可能断联、分区,但系统不能崩溃

缓存与数据库协作

flowchart TD
A[应用服务器] --写--> B[Redis]
B --写-->A
C[数据库] --读--> A

数据读取

根据 Key 从缓存中读取;如果缓存中没有,则根据 Key 在数据库中查找;读取到 value 后,更新缓存

数据写入

根据 Key 值写数据库;根据 Key 更新缓存


Redis集群切片方式

切片方式特点
客户端切片在客户端通过 key 的 hash 值对应到不同的服务器
中间件切片在应用软件和 Redis 中间,如Codis 等,有中间件实现路由分配
客户端服务端协作分片Redis Cluster 模式,客户端可采用一致性哈希,服务端提供节点的重定向到 slot 上,不同的 slot 对应不同的服务器

Redis 分布存储方案

存储方案特点
主从模式一主多从,故障时手动切换
哨兵模式有哨兵的主从模式,自动切换
集群模式分节点对等集群,分 slots

Redis分片方案

分片方案分片方式说明
范围分片按数据范围来做分片例:按用户编号分片
哈希分片通过对 key 进行 hash 运算分片可以把数据分配到不同实例,类似于取余操作,余数相同一个实例
一致性哈希分片哈希分片的改进可以有效解决重新分配节点带来的无法命中问题

Redis 数据类型

类型特点示例
String二进制,最大 512MB缓存,计数,共享 Session
Hash无序字典,数组+链表,key 对应一个 HashMap存储、读取、修改用户属性
ListLinked List,Array List消息队列,文章列表
Set键值对无序,唯一独立 IP,共同爱好,标签
Sorted Set有序键值对,唯一排行榜

Redis持久化

RDB

传统数据库中快照是思想。指定时间间隔将数据进行快照存储

AOF

传统数据库中日志的思想,把每条改变数据的命令追加到 AOF 文件末尾。

对比RDBAOF
备份量全量备份,整个数据库增量备份,只保存修改命令
保存间隔时间短,默认 1 秒
还原速度
堵塞情况save 会堵塞,bgsave 不会不会
体积
安全性低,容易丢数据

淘汰机制

淘汰范围机制名策略
不淘汰noeviction禁止驱逐数据,内存不足时写入报错。系统默认
过时淘汰的键空间volatile-random随机移除某个 key
volatile-lru优先移除 近期未使用的key【局部性原理】
volatile-ttlttl 值小的key 优先淘汰
全键空间allkeys-random随机移除某个 key
allkeys-lru优先移除近期未使用的 key