Redis 深度历险
2021-01-15 08:28:45 0 举报
AI智能生成
redis面试必备
作者其他创作
大纲/内容
集群
Sentinel
Cluster
槽位定位算法
跳转
迁移
迁移过程
从源节点获取内容 => 存到目标节点 => 从源节点删除内容
容错
网络抖动
可能下线 (PFAIL-Possibly Fail) 与确定下线 (Fail)
槽位迁移感知
集群变更感知
原理
线程 IO 模型
非阻塞 IO
事件轮询 (多路复用)
指令队列
响应队列
定时任务
通信协议
RESP(Redis Serialization Protocol)
单行字符串
多行字符串
整数
错误
数组
NULL
空串
客户端 -> 服务器
服务器 -> 客户端
持久化
快照原理
fork(多进程)
AOF 原理
AOF 重写
fsync
Redis 4.0 混合持久化
管道
深入理解管道本质
事务
Redis 事务的基本使用
原子性
discard(丢弃)
优化
Watch
Java 语言实现
PubSub
消息多播
PubSub
PubSub 缺点
近期 Redis5.0 新增了 Stream 数据结构,这个功能给 Redis 带来了持久化消息队列
小对象压缩
32bit vs 64bit
小对象压缩存储 (ziplist)
内存回收机制
主从同步
CAP 原理
一句话概括 CAP 原理就是——网络分区发生时,一致性和可用性两难全。
最终一致
增量同步
快照同步
所以务必配置一个合适的复制 buffer 大小参数,避免快照复制的死循环。
增加从节点
当从节点刚刚加入到集群时,它必须先要进行一次快照同步,同步完成后再继续进行增量同步。
无盘复制
源码
字符串SDS
embstr vs raw
这两种类型有什么区别呢?为什么分界线是 44 呢?
字典
dict 内部结构
渐进式rehash
查找过程
hash 函数
扩容条件
缩容条件
set 的结构
压缩列表
快速列表
「跳跃列表」内部结构
基本数据结构
string (字符串)
list (列表)
慢操作
快速列表
hash (字典)
set (集合)
zset (有序列表)
跳跃列表
容器型数据结构的通用规则
create if not exists
drop if no elements
应用
分布式锁
原子性
setnx 和 expire的问题
上面这个指令就是 setnx 和 expire 组合在一起的原子指令,它就是分布式锁的奥义所在。
超时问题
value设置成随机数
依靠lua脚本的原子性
可重入性
延时队列
异步消息队列
队列空了怎么办?
如果继续用pop的话会造成空轮训
简单限流
漏斗限流
GeoHash
用数据库来算附近的人
Scan
keys缺点
scan。scan 相比 keys 具备有以下特点:
拓展
过期策略
过期的 key 集合
定时扫描策略
从库的过期策略
新数据结构--Stream
消息 ID
增删改查
独立消费
消费
Stream 消息太多怎么办?
消息如果忘记 ACK 会怎样?
PEL 如何避免消息丢失?
Info 指令
Redis 每秒执行多少次指令?
Redis 连接了多少客户端?
Redis 内存占用多大 ?
复制积压缓冲区多大?
再谈分布式锁
收藏
0 条评论
下一页