**
一:分布式缓存(Redis集群)—高级篇
1.单节点Redis存在的问题
> 2.解决数据丢失(数据持久化)
- RDB持久化
bgsave通过fork获取子进程(获取时主进程阻塞)
- AOF持久化
- AOF与RDB对比
3.Redis搭建主从集群(解决并发能力)
-
主从的全量同步原理(第一次同步)
-
主从的增量同步原理
-
总结
4.master节点宕机解决方案–主从转换
- 哨兵实现主从切换(master挂了slave来当master)
5.RedisTemplate连接哨兵
配置文件加上即可
spring:
redis:
sentinel:
master: mymaster
nodes:
- 192.168.242.128:27001
- 192.168.242.128:27002
- 192.168.242.128:27003
password: 123321
6.Redis分片集群
6.1 散列插槽
------------------------------------------------------
-------------------------------------------------------
*6.2集群伸缩(可以添加节点到集群中,并指定对应的插槽)
6.3故障转移
手动转移
6.4.redisTemplate连接分片集群**
加上配置文件即可
spring:
redis:
cluster:
nodes:
- 192.168.242.128:7001
- 192.168.242.128:7002
- 192.168.242.128:7003
- 192.168.242.128:8001
- 192.168.242.128:8002
- 192.168.242.128:8003
password: 123321
7.redis多级缓存(亿级流量缓存方案)
7.1.传统缓存架构
7.2.多级缓存
7.3.JVM进程缓存(tomcat)采用Caffeine
7.4.nginx缓存(采用openResty实现)
7.5.redis缓存(openResty提供了redis操作)
8.缓存同步
8.1.常见缓存同步策略
基于Canal的异步通知
8.2.Canal
8.3Canal客户端
–导包
–编写方法
–实体类处理
8.4.多级缓存总结
**
二.Redis最佳实践
1.Redis的键值设计
1. 2.bigKey问题
1.3.选择何实的数据结构
–总结
–
2.批处理(数据导入Redis)
2.1 使用Redis命令实现–只能操作部分数据类型
2.2.Pipeline实现批处理
2.3.集群下的批处理(StringRedisTemplate已经封装了并行slot)
3.服务端优化
3.1.持久化配置
–3.2.慢查询
–
3.3.命令及安全配置
3.4.内存配置
3.5.选择集群还是主从
**
**
三.原理篇
**1.动态SDS字符串 **
1.1.非二进制安全:c语言中 ‘\0’ 是字符串结束标志,不可出现在字符串中
1.2.源码1.3.扩容(扩展空间中的+1是结束符号的位置,不计入alloc中)
–
2.IntSet
2.1 InSet结构
2.2.inset占用字节情况
–
2.3.inset升级
–
2.4.总结
–
3.Dict
3.1.Dict组成
dict结构
–
4.Dict的渐进式rehash
4.1.dict扩容
4.2.Dict的收缩
4.3.Dict的rehash
4.4.总结
5.ZipList(连续内存,不采用指针)
5.1.结构
5.2.encoding编码
5.2.1.字符串
5.2.2.整数
5.3.ZipList的连锁更新问题一旦插入的节点长度大于254,后一节点previous_entry_length将从1变为5,接下来后面的节点previous_entry_length都会发生改变
5.4.ZipList特性
6.QuickList(LinkedList+ZipList实现)
7.SkipList
7.1.基本结构
8.RedisObjec
8.1.结构
> -
8.2.编码方式
9.五中数据结构(String,List,Set,Zse,Hash)
9.1.String(底层采用动态SDS)
9.2.List(QuickList实现)
9.3.Set(Dict或IntSet实现)
9.4.ZSet(SKipList和Dict,还会采用ZipList实现)
采用ZipList情况
10.Hash
11.网络模型
11.1.用户空间和内核空间
从1,和2两方面提高效率
11.2.阻塞IO
11.3.非阻塞IO
11.4.IO多路复用
11.5.IO多路复用-select
11.6.IO多路复用-poll
11.7.IO多路复用-epoll
11.8.IO多路复用总结
11.9.epoll中的ET和LT模式
11.10.epoll下的web服务流程
11.11.信号驱动IO,异步IO,IO的同步异步
11.12.Redis是单线程还是多线程
11.13.Redis网络模型
11.14.Redis通信协议(RESP)
12.Redis内存回收
12.1.过期KEY处理
12.2.key淘汰策略
**