【Redis】浅谈布隆过滤器

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 面试官:我们来来一下布隆过滤器相关的东西吧,嗯?这都不会是吧,那今天先到这了哈。

Redis相关文章

前言

布隆过滤器是 Redis 4.0版本提供的新功能,作为插件加载到Redis服务器中,提供强大的去重功能。


相比于 Set 集合的去重功能而言,布隆过滤器在空间上能节省 90% 以上,但是它的不足之处是去重率大约在 99% 左右,也就是说有 1% 左右的误判率,这种误差是由布隆过滤器的自身结构决定的。俗话说“鱼与熊掌不可兼得”,如果想要节省空间,就需要牺牲 1% 的误判率,而且这种误判率,在处理海量数据时,几乎可以忽略。


BitMap

要说布隆过滤器就要先提一下位图(bitMap)这个数据结构,bitmap基于bit存储,本质上为二进制数组,利用下标对应的bit值为0或1进行逻辑判断。


redis中bit映射基于字符串进行位移运算,所以长度最大限制在512MB之内,所以最大是2^32位。建议每个key的位数都控制下,因为读取时候时间复杂度O(n),越大的串读的时间花销越大。


  • Redis BitMap命令
  • SETBIT:为位数组指定偏移量上的二进制位设置值,偏移量从0开始计数,二进制位的值只能为0或1。返回原位置值。
  • GETBIT:获取指定偏移量上二进制位的值。
  • BITCOUNT:统计位数组中值为1的二进制位数量。
  • BITOP:对多个位数组进行按位与、或、异或运算
127.0.0.1:6379> SETBIT first 01(integer)0127.0.0.1:6379> SETBIT first 31(integer)0127.0.0.1:6379> SETBIT first 00(integer)1127.0.0.1:6379> GETBIT first 0(integer)0127.0.0.1:6379> GETBIT first 3(integer)1
  • 应用场景

计算网站大数据量用户签到信息,假如网站有1000w日活用户,需要判断每个用户的签到情况,正适用bitMap统计,通过字符串的位移量代表用户id,对应的bit值为0则未签到,为1则已签到。


BloomFilter

理解了bitmap再回来看布隆过滤器就非常明朗了,布隆过滤器本质上为bitmap + 多个hash算法组成的数据结构。


当有key存储的时候通过多个hash算法得出对应下标集合,将下标列表对应的bit值置为1,则代表该key已存入过滤器中。


检索时,只要看看这些点是不是都是1就知道元素是否在集合中;如果这些点有任何一个 0,则被检元素一定不在;如果都是1,则被检元素很可能在(之所以说“可能”是误差的存在)。


image.png


但既然是要基于Hash函数就会有Hash冲突的问题,所以bloomFilter不能保证100%的数据准确,只能保证如果bloomFilter的值为1不一定存在,bloomFilter的值为0一定不存在。



相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
6月前
|
缓存 NoSQL Apache
【Redis】布隆过滤器原理与应用
【Redis】布隆过滤器原理与应用
85 1
|
6月前
|
存储 缓存 NoSQL
Redis 布隆过滤器实战「缓存击穿、雪崩效应」
Redis 布隆过滤器实战「缓存击穿、雪崩效应」
163 1
Redis 布隆过滤器实战「缓存击穿、雪崩效应」
|
6月前
|
NoSQL 算法 程序员
【Redis】布隆过滤器
【Redis】布隆过滤器
|
6月前
|
存储 缓存 NoSQL
在Java中实现redis缓存中的布隆过滤器
在Java中实现redis缓存中的布隆过滤器
137 0
|
5月前
|
NoSQL Redis 数据库
【Redis从入门到入土】布隆过滤器简介、特点和原理
【6月更文挑战第1天】布隆过滤器是一种节省内存的不确定数据结构,用于判断元素是否可能在一个集合中。它由位数组和多个哈希函数组成,能快速插入和查询,但存在误判风险:可能存在假阳性(判断存在但实际不存在),但绝无假阴性(判断不存在则确实不存在)。适用于大规模数据的去重问题,如电话号码判断、安全网站链接检查、黑名单和白名单校验。其工作原理是通过多个哈希函数将元素映射到位数组中,添加时设置相应位置为1,查询时所有位置都为1则可能存在,有0则肯定不存在。由于哈希冲突,可能导致误判,且一旦添加元素无法删除,以避免影响其他元素。
69 4
|
缓存 NoSQL 安全
Redis缓存雪崩、击穿、穿透解释及解决方法,缓存预热,布隆过滤器 ,互斥锁
Redis缓存雪崩、击穿、穿透解释及解决方法,缓存预热,布隆过滤器 ,互斥锁
249 5
|
6月前
|
缓存 NoSQL 算法
【redis】布隆过滤器(Bloom Filter)原理解析与应用
【redis】布隆过滤器(Bloom Filter)原理解析与应用
101 1
|
6月前
|
存储 NoSQL 算法
深入浅出Redis(十一):Redis四种高级数据结构:Geosptial、Hypeloglog、Bitmap、Bloom Filter布隆过滤器
深入浅出Redis(十一):Redis四种高级数据结构:Geosptial、Hypeloglog、Bitmap、Bloom Filter布隆过滤器
|
6月前
|
缓存 NoSQL Redis
Redis系列-9.Redis布隆过滤器BloomFilter
Redis系列-9.Redis布隆过滤器BloomFilter
99 1
|
6月前
|
数据采集 存储 NoSQL
Redis 中的布隆过滤器
Redis 中的布隆过滤器
46 0