分布式缓存技术-redis应用篇 (redisson ,数据一致性(缓存穿透,雪崩,击穿等问题),布隆过滤器 )

一、redisson - redis客户端工具哪家强?

你可能听过jedis,你可能也听过lettuce ,但是redisson 这玩意 相当于把java中的常用数据结构比如下面的集合,还有锁 都在redis中实现了, 除了不支持事务(这玩意可以用lua脚本)集群啊啥的他也都支持 分布式环境下 就用它了

主要它还是我们中国人写的 链接如右 redisson使用链接

如下为使用分布式锁demo

二、数据一致性

一般我们使用缓存的场景如上  但是高并发情况下,可能出现很多问题 比如缓存穿透,雪崩,击穿啥的


2.1缓存穿透

2.2缓存雪崩

2.3缓存击穿

三、布隆过滤器

3.1引入场景

然后还有个布隆过滤器,这玩意已经出来五十多年了,做的就是下面这个事

3.2原理 

使用位图 第一篇基础篇说过的 BitMap 为啥使用它呢?如果使用别的数据结构,占用内存太大了 

它的大致原理就是  比如 我要从 上架商品id中 判断当前的商品是否存在 那么 通过当前商品id进行

hash hash的值是多少 就数组长度根据相除 取模 位图的对应index处值就置为多少 那这样很容易产生hash 碰撞 所以 一般会进行多次hash算法

3.3结论 

下面这个结论 好好思考下 为啥 

 代码中咋引入呢?如下引入guava包

3.4代码中使用方式

使用方式

 可以看到会有误判率 这个没办法   比如  我商品id  为 135 与 146 的 三次的hash值取模后 由于三次都hash碰撞 所以存在误判率

2 5 7 所以由于hash碰撞

 存在误判率也没办法 布隆过滤器已经帮了大忙了  因为如果布隆过滤器判断不存在 那么一定不存在所以后续流程也不用走了  优化后的逻辑如下图 查询缓存前查查布隆过滤器

 引入布隆过滤器之前由于某片redis数据都同时失效或者被删除 可能同时访问 数据库 的连接数过多 ,导致 报如下连接不够的异常 而且数据不存在还一直访问数据库 对其他 的业务也会有很大影响,毕竟连接都被没用请求占了 所以 适当时候引入 布隆过滤器 尤为重要,可以在每天定时任务预处理把对应核心数据比如商品id啥的给刷进去 这样就算还有 3%的误差 也拦截了百分之97的无用请求 能极大缓解数据库的压力 这个精度还可以设置的 当然设置越大 对应 hash的函数就越多 然后

位图就越大

3.5 优化版 可计数布隆过滤器

 因为布隆过滤器无法删除 为啥呢? hash碰撞呗 前面说了 位的格子是被数据公用的

 后面 争对布隆过滤器 因为hash碰撞 所以无法删值 所以 对 布隆过滤器优化后又有了个 计数版的

每删除一次对应 位的计数减一 减到0对应位就置为0

 如下 计数版的布隆过滤器可以删除

如果能看到这里 你是真滴秀 欢迎关注 B站 请叫我觉哥 我会定期在B站直播陪伴学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我才是真的封不觉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值