redis个人笔记2

**

一:分布式缓存(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淘汰策略

请添加图片描述
在这里插入图片描述
请添加图片描述
请添加图片描述

**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值