Redis 详解---布隆过滤器

在面试Redis 相关的知识,总会问道缓存穿透、缓存击穿、缓存雪崩 ,首先解释下三者的含义以及区别

缓存穿透

查询数据库一定不存在的数据,那么此类的查询一般恶意的查询,缓存一不存在该类数据,大量的查询会导致数据库负荷

缓存击穿

针对某个热点数据访问量极高,某个时点热点数据缓存失效,就会导致大量的请求查询数据

缓存雪崩

某个时间点缓存集体失效

不同的问题有不同的解决方案,针对缓存穿透,普遍的解决方案是采用布隆过滤器

什么是布隆过滤器

布隆过滤器,由一串很长的二进制向量组成,可以看作二进制数组,里面存的值 0 或者 1 ,实现的原理,当向数据库添加数据时,通过多个 hash 函数,计算

出不同的值,在二进制数组中对应的未知将值置为 1 ,以此类推

如何判断数据是否存在

通过添加的hash 函数再次计算值对应的位置,判断这些位置中的值是否存在 0 (注意:这里判断不是全为1 )

如果存在至少一个0 ,则数据一定不存在于数据库

如果全部的值为 1 ,则无法判断数据是否存在

由于布隆过滤器的存储特性,当数据被删除时,无法重置对应位置的值为0(多个数据互相影响)

Redis  实现布隆过滤器 bigmaps

计算机底层存储的基础单位是字节,一个字节8位,将 “big”字符串存储,使用 ASCII 98、105、103 存储如下

 在Redis ,Bitmaps 提供了一套命令来操作二进制中的位

 将k1 第七位置为1 (下标从 0 开始),即第一个字符对应的码值加1 

Redisssion 

Redis 实现布隆过滤器底层就是通过 bitmap 数据结构,使用比较广的客户端工具 Redission 

Guava 工具

google 工具包 guava 提供了布隆过滤器的实现

布隆过滤器:https://www.cnblogs.com/ysocean/p/12594982.html

布隆过滤器:https://blog.csdn.net/chenssy/article/details/110102364

原文地址:https://www.cnblogs.com/bytecodebuffer/p/14358564.html