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对布隆顾虑器key进行持久化操作

布隆过滤器的原理?

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

布隆过滤器的工作流程:

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

在这里插入图片描述

布隆过滤器的优点:

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

布隆过滤器的缺点:

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

布隆过滤器的应用场景:

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/509030.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文阅读:基于超像素的图卷积语义分割(图结构数据)

#Superpixel-based Graph Convolutional Network for Semantic Segmentation github链接 引言 GNN模型根据节点特征周围的边来训练节点特征,并获得最终的节点嵌入。通过利用具有不同滤波核的二维卷积对来自附近节点的信息进行整合,给定超像素方法生成的…

NLP_文本数据分析(代码示例)

目标 了解文本数据分析的作用.掌握常用的几种文本数据分析方法. 1 文件数据分析介绍 文本数据分析的作用: 文本数据分析能够有效帮助我们理解数据语料, 快速检查出语料可能存在的问题, 并指导之后模型训练过程中一些超参数的选择. 常用的几种文本数据分析方法: 标签数量分布句…

六、继承(一)

1 继承的引入 以往我们想分别实现描述学生、老师的类,可能会这样子做: class Student {string _name;string _number;int _tel;int id;string _address;int _age; }; class Teacher {string _name;int _level;int _tel;int id;string _address;int _ag…

前端面试练习24.3.2-3.3

HTMLCSS部分 一.说一说HTML的语义化 在我看来,它的语义化其实是为了便于机器来看的,当然,程序员在使用语义化标签时也可以使得代码更加易读,对于用户来说,这样有利于构建良好的网页结构,可以在优化用户体…

数据结构 第3章 栈、队列和数组(一轮习题总结)

第3章 栈、队列和数组 3.1 栈3.2 队列3.3 栈与队列的应用3.4 数组和特殊矩阵 3.1 栈(1 10 11 20) 3.2 队列(6 12 14 17) 3.3 栈与队列的应用(6 11) 3.4 数组和特殊矩阵 3.1 栈 T1 栈和队列具有相同的逻辑…

统信UOS及麒麟KYLINOS操作系统上如何切换键盘布局

原文链接:如何切换键盘布局 | 统信UOS | 麒麟KYLINOS Hello,大家好啊,最近有朋友在群里提到他的键盘输入“Y”会显示“Z”,输入“Z”会显示“Y”。这个问题听起来可能有些奇怪,但其实并不罕见。出现这种情况的原因&…

面试经典150题【51-60】

文章目录 面试经典150题【51-60】71.简化路径155.最小栈150.逆波兰表达式求值224.基本计算器141.环形链表2.两数相加21.合并两个有序链表138.随机链表的复制19.删除链表的倒数第N个节点82.删除链表中的重复元素II 面试经典150题【51-60】 71.简化路径 先用split(“/”)分开。然…

【软件设计师】通俗易懂的去了解算法的时间复杂度

🐓 时间复杂度 常用排序的时间复杂度 时间频度 算法需要花费的时间,和它语句执行的次数是成正比的,所以会把一个算法种语句执行次数称为语句频度和时间频度、记作T(n)。 定义 时间复杂度就是找到一个无限接近时间频度T(n)同数量级的函数&am…

基于springboot+vue实现校企合作项目管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现校企合作项目管理系统演示 摘要 这是一个计算机的时代,在计算机应用非常广泛的时代中,用计算机来完成对信息的处理有着非常好的使用效果。特别是针对学校而言亦是如此,通过在学校中的信息化建设,能够很好的提升…

S3---FPGA-A7板级电源硬件实战

视频链接 FPGA-A7板级电源硬件实战01_哔哩哔哩_bilibili FPGA-A7板级电源硬件实战 1、基于A7 板级的系统框图 2、基于A7 板级的电源设计细则 2.1、A7 FPGA功耗评估 Artix-7 FPGA电源有VCCINT, VCCBRAM, VCCAUX, VCCO, VMGTAVCC和VMGTAVTT。 2.1.1、A7 FPGA电源管脚 2.1.2…

http 协议深入介绍

一,http 相关概念 (一)关键名词 1,互联网 是网络的网络,是所有类型网络的母集 2,因特网 世界上最大的互联网网络。即因特网概念从属于互联网概念。习惯上,大家把连接在因特网上的计算机都成…

Matlab|基于Logistic函数负荷需求响应

目录 1 基于Logistic函数的负荷转移率模型 2 程序示例 3 效果图 4 下载链接 负荷需求响应模型种类较多,有电价型和激励型等类型,本次和大家分享一个基于Logistic函数的负荷转移率模型,该模型属于电价型,由于该方法使用的较少&a…