Redis
- redis的处理过程,源码解析
Redis 持久化
RDB( redis database backup)
AOF( append only file)
主从
1
slaveof ip port
数据同步
- 主从第一次同步: 全量同步
- bgsave + repl_baklog

- 增量同步
- 通过offset同步 repl_baklog
- repl_baklog 是一个循环数组
- offset差距过大,不可避免进行全量同步

- 优化方法
- 无磁盘复制
- redis单节点内存占用不要太大
- 适当提高repl_baklog的大小, 尽快实现故障恢复
- 限制slave的节点数量使用链式

哨兵
主节点挂了怎么办
- Sentinel集群
- 监控
- 心跳机制监测服务状态
- 主观下线
- 客观下线
- 自动故障恢复
- 通知
- 监控

- 配置读写分离
- yaml文件
1 2 3 4 5 6 7 8
spring: redis: sentinel: master: mymaster nodes: - 192.168.150.101:27001 - 192.168.150.101:27003 - 192.168.150.101:27002
- 配置Bean
1
LettuceClientConfigurationBuilderCustomizer类

分片集群

- 散列插槽
- 数据不和节点绑定,数据和插槽绑定
- 如何把相同数据放在同一个redis分片中
- set {a}num aaa
- 大括号里面为有效hash值
- 配置
-
cluster
1 2 3 4 5 6 7
spring: redis: cluster: nodes: - 192.168.150.101:7001 - 192.168.150.101:7003 - 192.168.150.101:7002
-
多级缓存

JVM进程缓存
- Caffeine 示例

多级缓存

OpenResty
对于这部分,我们先不管了,等以后再好好学吧,过个眼瘾就行了
缓存同步
- 数据同步策略
- 设置有效期
- 简单,方便
- 时效性差,不一致问题严重
- 更新频率低,一致性时效性要求低
- 同步双写
- 失效性强,一致性强
- 代码侵入
- 一致性,时效性要求高
- 异步通知
- 低耦合,同时通知多个缓存服务
- 时效性一般,可能存在中间不一致状态
- 设置有效期
- Canal 异步通知
- 监听 bin log 自动更新

Redis最佳实践
原理篇
数据结构
SDS 简单动态字符串
- sdshdr8
- len : u8 ,所以最长254
- alloc
- flags
- buf[]
- sdshdr16,32,64
IntSet
- intset
- encoding
- length
- contents[]

Dict
- dictht
- table
- size
- sizemask
- used



ZipList
- zlbytes
- zltail: 最后一个节点的偏移量
- zllen
- entry
- 长度不固定
- pre_entry_len
- 1个字节或者 5个字节
- encoding
- 1/2/5
- content
- 字符串/整数
- zlend


QuickList

SkipList


RedisObject


网络模型
阻塞IO
- 等待数据阻塞
- 数据拷贝阻塞
非阻塞IO
- 反复轮询
- 数据拷贝阻塞
IO多路复用




信号驱动IO
异步IO
Redis 网络模型
- Redis核心业务是单线程,整个Redis是多线程


场景应用
缓存
- Cache Aside
- Read Through
- Write Through
- Write Behind