Redis 缓存击穿原理及解决方案

Redis 缓存击穿原理及解决方案

为什么要使用数据缓存?

为什么把数据库的数据放在内存中?

内存速度比磁盘快

可以减少数据库的压力

指标计算的sql很复杂时,可以把结果放在内存中,避免复杂的sql重复查询

为什么不用HashMap做缓存,以及HashMap和Redis的区别?

持久化

存储大小

本地与分布式

API

更丰富的数据结构

过期策略

Redis为什么快?

单线程的多路复用 epoll

内存

Redis缓存击穿什么时候发生?

查询一个必然不存在的数据。每次都会访问DB,如果有人恶意破坏,很可能直接对DB造成影响。

产生问题:

要避免从数据库查询不存在的数据,怎么做?

如何从海量数据中快速判断一个元素是否存在?

如果一个网站有100亿url有一个url存在黑名单中,每条url平均64个字节

1)这个黑名单要怎么存?

2)若此时任意输入一个url,如何判断url是否在这个黑名单中?

解决办法:

布隆过滤器

布隆过滤器使用

1.离线数据加载到布隆过滤器

2.布隆过滤器查询

3.布隆过滤器不存在,直接返回

4.布隆过滤器存在,cache不存在,从数据库查询

5.数据返回

布隆过滤器的本质

1.位数组(二进制向量)

2.一系列随机映射函数

存储什么? 0或1

怎么存储? hash()计算index

怎么快速判断是否存在?布隆过滤器

什么时候出现误判? 哈希碰撞

误判以后会发生什么?不存在的认为存在

怎么减少误判率?m(位数组长度) k(哈希函数的个数)

特性

存在一定的误判率

特点

如果布隆过滤器判断元素存在集合中,元素可能不存在

如果布隆过滤器判断元素不存在,一定不存在

如果元素实际存在,布隆过滤器一定判断存在

如果元素实际不存在,布隆过滤器可能判断存在

为什么用哈希函数?

哈希函数经过计算后都会得到一个相同长度的结果

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值