为什么快
1、基于内存
2、采用reactor模型
3、高效的数据结构
基础数据结构
String(SDS)
底层结构
长度 + 数组
应用场景
常规数据、计时
分布式锁:
setnx key value
Hash
应用场景:
相比较String,适用于经常存取对象中的个别字段信息
如购物车(key为用户id,value为<商品,商品数量>)
有两个数组,渐进式 hash 迁移数据
List
Set
SortSet
skipList(跳表),高效的查询性能
ZSet(有序集合)
使用场景:
排行榜(如直播送礼物的排行榜、微信步数排行榜、游戏段位排行榜、话题热搜排行榜等)
高可用
主从复制
master节点 -> 同步数据给slave节点,最终达到最终一致性
节点出错,需要人工干预,手动进行故障恢复
Redis Sentinel(自动进行故障恢复)
哨兵节点、主从节点,是不一样的节点
能力:监控、通知、自动故障恢复、配置中心
天然的分布式架构、至少三个节点
节点自动发现
使用INFO 命令,去找主节点,从主节点那里,获取从节点的信息
使用发布、订阅的机制,使用默认的通道,接收其他哨兵同步的信息
故障检测:
主观宕机SDOWN:针对主节点、从节点、其他哨兵节点
客观宕机ODOWN:仅针对主节点
故障转移:
几个状态:
SENTINEL_FAILOVER_STATE_XXXX
NONE:
WAIT_START: 选择负责的sentinel的leader的选举,去对故障的master节点进行恢复
SELECT_SLAVE: 负责的sentinel节点从 该主节点下存活的从节点里,选一个当主节点
选最完整的从节点
SEND_SLAVEOF_NOONE:
选择好的新主节点后,开始配置新主节点
WAIT_PROMOTION:
等待从节点自己提升为master节点
RECONF_SLAVES:
配置其他从节点,以新主节点为准,进行主从复制
UPDATE_CONFIG:
更新主节点的配置,正式完成故障转移,对外提供服务
注意:
1、sentinel 不主动移除从节点信息,为了提高恢复效率吧
2、脑裂的情况下,无法完全避免数据丢失。但是可以配置
min-replicas-to-write 1
min-replicas-max-lag 10
使丢失降到最低
Redis Cluster
提供高伸缩性