java八股 redis

Redis篇-01-redis开篇_哔哩哔哩_bilibili

java八股 redis_第1张图片java八股 redis_第2张图片

1.缓存穿透

java八股 redis_第3张图片

java八股 redis_第4张图片

java八股 redis_第5张图片

 2.缓存击穿

java八股 redis_第6张图片

java八股 redis_第7张图片

 逻辑过期里的互斥锁是为了保证只有一个线程去缓存重建

java八股 redis_第8张图片

3.缓存雪崩

java八股 redis_第9张图片

java八股 redis_第10张图片

java八股 redis_第11张图片

4.双写一致性

java八股 redis_第12张图片

4.1要求一致性(延迟双删/互斥锁)

延迟双删无法保证强一致性

java八股 redis_第13张图片

 那么前两步删缓和更新数据库哪个先呢?都有问题

java八股 redis_第14张图片

双删是为了保证再次删除旧的缓存(上图的两种情况旧缓存)

延迟是因为保证db的主从同步,如果提前删除,那么有查询过来到数据库从节点,里面还没同步,那么查到了旧数据,还把旧数据写到缓存里,等于白删了。

后删虽然无法保证DB主从同步期间查询的有效性,但是能保证删除之后,再查询一定是新数据。

延迟双删无法保证强一致性

互斥锁能够保证强一致性,但是效率低--->用读写锁

java八股 redis_第15张图片

4.2要求高可用,最终一致性(异步通知)

java八股 redis_第16张图片

java八股 redis_第17张图片

java八股 redis_第18张图片

java八股 redis_第19张图片

5.redis持久化 RDB + AOF

java八股 redis_第20张图片

aof只记录写命令,不记录读命令。

bgwrite会屏蔽连续的修改,只记录同一个记录的最后一次修改

java八股 redis_第21张图片

aof自动记录频率 

java八股 redis_第22张图片

java八股 redis_第23张图片

 java八股 redis_第24张图片java八股 redis_第25张图片

6.redis 的key过期策略(过期删除)

java八股 redis_第26张图片

java八股 redis_第27张图片

java八股 redis_第28张图片

java八股 redis_第29张图片

7.redis 的key淘汰策略(内存满了删除)

java八股 redis_第30张图片

java八股 redis_第31张图片

java八股 redis_第32张图片

java八股 redis_第33张图片

8.分布式锁

  Redis篇-10-redis分布式锁-实现原理(setnx、redisson)_哔哩哔哩_bilibili

redisson重入重试看门狗

9.分布式锁主从一致性-->红锁RedLock

主节点加锁宕机,从节点变主节点但是锁没来得及更新过来,那么其他线程可以获取锁。

java八股 redis_第34张图片

java八股 redis_第35张图片

但是红锁一般不用,性能不好又复杂。

redis一般保证高可用性和最终一致性,不怎么用红锁,因为服务器宕机是小概率

如果要保证强一致,用zookeeper。

java八股 redis_第36张图片

10.redis集群方案(主从、哨兵、分片)

10.1主从模式(高并发)

java八股 redis_第37张图片

java八股 redis_第38张图片

 redis主从如何同步(全量同步,增量同步)

java八股 redis_第39张图片

java八股 redis_第40张图片

10.2哨兵模式(高可用)

java八股 redis_第41张图片

java八股 redis_第42张图片

10.2.1脑裂

主节点和从节点断联,仍然接收到客户端数据。但哨兵选出了新的主节点,老主节点降成从节点并被主从复制,那么这段时间的操作会丢失。

java八股 redis_第43张图片

意思就是你主节点和从节点的联系有问题,那你就别写入

10.2.2单redis读(10万)写(8万)并发能力

java八股 redis_第44张图片

 

10.3分片集群

java八股 redis_第45张图片

java八股 redis_第46张图片

java八股 redis_第47张图片

11.redis为什么快

java八股 redis_第48张图片

11.1 I/O多路复用

java八股 redis_第49张图片

11.2 阻塞I/O

java八股 redis_第50张图片

11.3非阻塞I/O 

java八股 redis_第51张图片

 11.4 多路复用I/O

多路复用IO会用一个select去轮询监听一个socket集合,一个socket能代表一个需要拷贝的数据,在第一阶段谁先就绪就谁来,可以看成并行,先来先服务,第二阶段循环调用recvfrom去处理各个socket。

而阻塞IO和非阻塞IO每个数据都有顺序(串行),即使别的数据好了只要当前没有数据也会死等这一个数据。导致效率低。

java八股 redis_第52张图片

java八股 redis_第53张图片

 11.5Redis网络模型

redis速度主要受网络IO影响,所以易受影响的部分加了多线程升级,但是最终命令执行还是串行的。

java八股 redis_第54张图片

java八股 redis_第55张图片

你可能感兴趣的:(java,java,redis,开发语言)