Redis


画板

为什么快

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

提供高伸缩性

示意图

哈希槽映射

常见面试题

参考:

1、https://mp.weixin.qq.com/mp/homepage?__biz=MzI0NTE4NDg0NA==&hid=1&sn=3174a495bc96271a7ae163f9d60b9f37


文章作者: 王利康
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 王利康 !
  目录