【java】redis

缓存三兄弟

1. 缓存穿透

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
误判率:数组越小,误判率越大;数组越大,误判率越小,但带来了更多的内存消耗。
布隆过滤器的实现方案:Redisson、Guava。一般设置一个误判率,5%以内。
请添加图片描述
优点:内存占用少,没有多余key;
缺点:实现复杂,存在误判,但是通过设置误判率,可以精准控制内存成本(根据误判率自动计算处数组长度和hash函数个数),设置边界可匹配数据库的承载能力。

总结

  1. Redis 使用场景

根据自己的项目回答:缓存 or 分布式锁(常用的);

  1. 什么是缓存穿透?如何解决?

缓存穿透:查询一个不存在的数据,mysql查询不到数据也不会直接写入缓存,就会导致每次请求都查数据库
方案一:缓存空数据
方案二:布隆过滤器

2. 缓存击穿

请添加图片描述
请添加图片描述互斥锁:强一致,性能差(银行行业);
逻辑过期:高可用,性能优(互联网);

总结

  1. 解释一下缓存击穿

缓存击穿:给某一个key设置了过期时间,当key过期的时候,恰好这时间点对这个key有大量的并发请求过来,这些并发的请求可能会瞬间把DB压垮。
解决方案一:互斥锁,强一致,性能差
解决方案二:逻辑过期,高可用,性能优,不能保证数据绝对一致

3. 缓存雪崩

请添加图片描述
以上三种模式,都可以用限流策略来保底。

双写一致性

请添加图片描述
请添加图片描述
请添加图片描述
缺点:出现脏数据;因此删除两次;延时:主从DB,读写分离,需要等同步。
请添加图片描述
强一致性:
请添加图片描述
读时:共享锁;写时:排他锁。保证强一致性。
有很多时候只要保证最终一致性即可,允许短暂不一致:
请添加图片描述
请添加图片描述
请添加图片描述

持久化

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

数据过期策略

请添加图片描述
请添加图片描述
Redis的过期删除策略:惰性删除+定期删除两种策略进行配合使用。

数据淘汰策略

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

分布式锁

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
实现复杂、性能差、运维繁琐。如果非要:使用zookeeper保证强一致性。
请添加图片描述

Redis集群方案

请添加图片描述

1. 主从一致

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

2. 哨兵模式

主从节点:保证不了集群的高可用,主节点宕机则失去写数据的能力。
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

3. 分片集群

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

redis其他问题

在这里插入图片描述
在这里插入图片描述
因此:

  1. 减少无效等待;
  2. 减少用户空间与内核空间的数据拷贝
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    单线程模型下,真正影响性能的并不是IO多路复用的监听机制,也不是命令的执行,而是网络IO!
    因此在命令解析(接受请求数据–>转为redis指令)和命令回复处理器引入了多线程。但是在命令执行时仍然是串行处理。
    在这里插入图片描述
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值