1 布隆过滤器如何解决缓存穿透
- 把数据的key在布隆过滤器中记录,相当于在redis前挡一个布隆顾虑器。当有新请求时,先去过滤器中查询是否存在,如果不存在直接返回(减少无数据情况下,命令直接打到mysql数据库的压力);如果存在,再去查询缓存redis,如果redis里没有查到再去查询mysql。
2 整体架构
3-1 setBit构建代码
- 计算key的hash值,对数据长度取模,计算在bitmap数组中位置,把相应位置置1
3-2 getBit构建代码
- 计算key的hash值,对数据长度取模,计算在bitmap数组中位置,查看布隆过滤器是否有此元素
3-3 逻辑处理代码
- 查布隆过滤器显示可能有数据,redis有数据,直接返回
- 查布隆过滤器显示可能有数据,redis无数据,mysql有数据;把mysql的数据回写到redis
- 查布隆过滤器显示无数据,直接返回