Redis数据类型--布隆过滤器类型详解及应用

数据结构

Redis无论什么数据类型,存储的时候都是以键值对key-value形势存储,并且所有的key都是String类型,本文讨论的数据类型是value的数据类型。

布隆过滤器

概述:布隆过滤器(Bloom Filter)是 1970 年由布隆提出的,Redis 4.0版本已插件的形式引入到Redis中,布隆过滤器是一种占用空间非常小的概率数据结构,效率高,有一定的误判率,而且无法删除元素,主要用于去重场景。

布隆过滤器常用命令:

命令描述
bf.add key value向布隆过滤器key中添加value
bf.madd key value1 value2 …向布隆过滤器key中添加多个value(支持批量操作)
bf.exists key value判断布隆过滤器key中是否存在value,value一定不存在返回0,可能存在返回1
bf.mexists key value1 value2 …判断布隆过滤器key中是否存在value1 value2 (支持批量操作),value一定不存在返回0,可能存在返回1
bf.scandump key value对布隆顾虑器进行持久化操作

布隆过滤器的原理?

  • 布隆过滤器(Bloom Filter)由二进制向量(即位数组)和一系列随机映射函数(即哈希函数)两部分组成,其空间占用非常小。
  • 布隆过滤器(Bloom Filter)使用exists()方法来判断某个元素是否存在,布隆过滤器判断某个值不存在,那么这个值就一定不存在,当其判断某个值存在时候,这个值不一定存在,但是有一定的误判率。
  • 布隆过滤器(Bloom Filter)判断某个值是否存在的时候,会对这个值进行hash计算,然后找到在位数组中的位置(可能是多个位置),若都为1则表示这个值可能存在,若有一个为0,则说明值不存在。

布隆过滤器的工作流程:

  • 往布隆过滤器中添加值的时候,先使用布隆过滤器的的hash函数对值进行计算,得到对应的hash值,找到对应的位数组位置,将只设置为1。
  • 判断一个值是否存在于布隆过滤器的时候,同样先对值进行相同的hash计算,得到对应的hash值,找到对应的位数组位置,如果都为1,则表示只存在于布隆过器中,否则就不在。

在这里插入图片描述

布隆过滤器的优点:

  • 空间占用小,不记录原数据,只标记是否存在。
  • 支持海量数据下的不精准判断元素是否存在,存在误判。

布隆过滤器的缺点:

  • 存在误判,不适合准确度要求高的场景。
  • 只能增加不可删除,存在误判。
  • 只能去重判断,不支持计算,对于需要去重计数的场景不友好。

布隆过滤器的应用场景:

  • 防止缓存穿透。
  • 黑名单校验,防止被攻击。
  • 判断用户是否访问过,防止用户看到重复的内容。
  • 统计在线人数。

如有不正确的地方请各位指出纠正。

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值