1.引子
说起redis,小伙伴们都很熟悉,用一句话来描述:reids是一个功能丰富,性能高,基于k/v的NoSql数据库
它的功能丰富体现在
- 提供了丰富的数据结构能力:字符串、哈希、列表、集合、有序集合
- 提供了持久化能力:RDB、AOF
- 提供了多种使用姿势:主从复制、哨兵、集群
- 提供了键过期能力,可用于缓存系统实现
- 提供了发布订阅能力,可用于消息系统实现
- 提供了分布式支持能力,可用于实现分布式锁、分布式Id
- 提供了计数能力,可用于计数器系统实现
- 等
它的高性能体现在
- 单线程架构,避免多线程竞争,切换带来的性能损失
- 官方给出了10万量级的QPS,实际应用中打个对折,通常支持到3-5万的QPS
你看到了,这就是redis,不仅功能丰富,且高性能!这也是为什么今天,很多应用中我们都会选择redis作为缓存方案的实现
今天这篇文章,我不准备给你分享redis的细节,它们太多了,比如说客户端命令;比如说数据结构对应的内部编码;比如说RESP协议;比如说持久化等
我们重点来探讨一下主从复制、哨兵、集群的使用姿势。让我们开始吧!
2.案例
这里我们假设在x应用中,选择redis作为缓存方案的实现。我们分别来看一下
- 如果采用主从复制方案,需要考虑哪些点?
- 如果采用哨兵模式,需要考虑哪些点?
- 如果采用集群模式,需要考虑哪些点?
2.1.主从复制
首先来看主从复制,所谓主从复制即明确了两类角色的存在
- 主master
- 从slave
主从复制的逻辑架构,大概是这样的