布隆过滤器原理与场景

一文搞懂“布隆过滤器“原理(附Java代码实战) 最近在学习隐私计算时了解到布谷鸟过滤器的概念(后面会专门写篇博客介绍),自然也就联系到了本文的主角—布隆过滤器。关于布隆过滤器的名号我很久之前就听说过了,但是一直没有深入了解,今天就系统性学习一下并通过这篇博客记录下来。废话不多说,开始吧!布隆过滤器(Bloom Filter)是1970年由布隆(虽然我搜遍全网也没找到老先生的照片)提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。 阅读详情
原理

一个很长的二进制向量和一系列随机映射函数 。
通过设置向量数组长度与定义多种随机hash函数,正向预热数据,反向查询数据。使用的hash函数越多,区分度就越高。

图解:

使用场景
  • 大数据判断是否存在:这就可以实现出上述的去重功能,如果你的服务器内存足够大的话,那么使用 HashMap 可能是一个不错的解决方案,理论上时间复杂度可以达到 O(1 的级别,但是当数据量起来之后,还是只能考虑布隆过滤器。

  • 解决缓存穿透:我们经常会把一些热点数据放在 Redis 中当作缓存,例如产品详情。 通常一个请求过来之后我们会先查询缓存,而不用直接读取数据库,这是提升性能最简单也是最普遍的做法,但是 如果一直请求一个不存在的缓存,那么此时一定不存在缓存,那就会有 大量请求直接打到数据库 上,造成 缓存穿透,布隆过滤器也可以用来解决此类问题。

  • 爬虫/ 邮箱等系统的过滤:平时不知道你有没有注意到有一些正常的邮件也会被放进垃圾邮件目录中,这就是使用布隆过滤器 误判 导致的。

  • 抖音重复内容不再推荐

  • 一段时间内短信发送去重

实现方式

1、Google 的 Guava 实现内存中的布隆过滤器,提供了封装了多种hash算法,根据参数逆向计算槽的长度与hash算法的使用的维度
2、Redis使用bitmap,需手动实现hash算法

布隆过滤器的缺陷:

1、它在判断元素是否在集合中时是有一定错误几率的,比如它会把不是集合中的元素判断为处在集合中;
增加多个hash算法,减少碰撞率
2、 不支持删除元素。
根据业务场景,有hash位计数(增加空间复杂度)

使用建议:

1、 选择多个 Hash 函数计算多个 Hash 值,这样可以减少误判的几率
2、 布隆过滤器会消耗一定的内存空间,所以在使用时需要评估你的业务场景下需要多大的内存,存储的成本是否可以接受。

浏览器主页被360篡改?教你彻底解决并预防再次发生 通过本文介绍的快捷方式修复、注册表清理、启动项管理三步法,可解决99%的浏览器主页篡改问题。权限最小化原则:非管理员账户日常使用,关键系统目录设置写保护定期安全审计:每月检查启动项/计划任务/浏览器扩展备份还原机制:创建系统还原点,重要操作前做好快照安全意识培养:不安装来源不明的软件,谨慎处理软件安装向导中的附加选项浏览器安全是系统防护的重要环节,建议结合EDR(终端检测与响应)方案构建立体防护体系。对于普通用户,保持系统更新、使用官方渠道下载软件、定期清理系统垃圾,即可有效预防绝大多数安全威胁。 阅读详情

相关推荐

Ubuntu 24.04下Loki+Alloy+Grafana日志分析系统的快速部署与实践

本文详细介绍了在Ubuntu 24.04系统上快速部署Loki+Alloy+Grafana轻量级日志分析系统的完整流程。通过二进制安装Loki、配置Alloy采集器以及设置Grafana可视化界面,构建了一套资源消耗低、易于管理的日志解决方案,并实战演示了如何采集和分析网络设备日志,特别适合资源有限的中小团队或边缘计算场景。

tensor9flow的博客 234

数据结构-布隆过滤器和可逆布隆过滤器

在解决缓存穿透问题时,往往会用到一种高效的数据结构-布隆过滤器,其能够快速过滤掉不存在的非法请求,但其也存在一定的误差,即少量不存在的请求也会被放过去。本文对布隆过滤器家族进行介绍,除了常见的普通布隆过滤器(Bloom Filters),还有计数布隆过滤器(Couting Bloom Filters)和可逆布隆过滤器(Invertible Bloom Filters)。

zhuohuashiyi 1980

Redis:bitmap+布隆过滤器

本文将讲解https://img-blog.csdnimg.cn/a47855c6b527431888ddc9f952c00fde.pngbitmap的概念、命令、应用场景,布隆过滤器的概念和使用bitmap实现布隆过滤器。

lifetime_gear的博客 1329

全网首发:香橙派5MAX安装ubuntu20.04(换了官方桌面)及ros,运行LIVOX-mid360混合固态激光雷达,实际测试fastlio(只能说可以跑,还是有点吃力)

独家发布!!!香橙派5MAX安装ubuntu20.04(换了官方桌面)及ros,运行mid360混合固态激光雷达,测试fastlio(只能说可以跑,还是有点吃力),国货也算崛起了。

2402_82745259的博客 5996

PyCharm与MicroPython联手:打造高效ESP32开发环境

本文详细介绍了如何使用PyCharm与MicroPython打造高效的ESP32开发环境。通过配置PyCharm插件、刷写MicroPython固件以及实战示例,帮助开发者快速上手嵌入式Python开发,显著提升物联网项目的开发效率。

weixin_29169899的博客 380

Redis 之 布隆过滤器 与 布谷鸟过滤器

大家都知道,在计算机中IO一直是一个瓶颈,很多框架以及技术甚至硬件都是为了降低IO操作而生,今天聊一聊过滤器,先说一个场景:我们业务后端涉及数据库,当请求消息查询某些信息时,可能先检查缓存中是否有相关信息,有的话返回,如果没有的话可能就要去数据库里面查询,这时候有一个问题,如果很多请求是在请求数据库根本不存在的数据,那么数据库就要频繁响应这种不必要的IO查询,如果再多一些,数据库大多数IO都在响应这种毫无意义的请求操作,那么如何将这些请求阻挡在外呢?

Wewe的博客 1410

【数据挖掘】遗传算法原理浅析:什么是遗传算法?遗传算法的工作原理是什么?

遗传算法(Genetic Algorithm,GA),是进化算法的框架和核心。 各种进化算法有什么异同? - 及时物语的回答 - 知乎 https://www.zhihu.com/question/39152390/answer/901070749

纸羊同学的博客 4271

Redis-布隆过滤器、布谷鸟过滤器

布隆过滤器、升级版布隆过滤器-布谷鸟过滤器

weixin_43420030的博客 1207

二次规划问题(qp)和序列二次规划问题(sqp)的简单理解

当二次规划的约束为非线性约束时,通常会采用sqp进行求解,用连续求解qp的方法来得到非线性约束条件下的最优解,上述的qpoases和osqp均无法直接求解非线性约束问题,所以如果使用这两个库的话,注意,sqp是结果,而不是原因,只有在非线性约束的情况下才会考虑sqp求解,如果问题本身就是线性约束,则直接用qp解就行。对于工程师而言,我们在编写代码的时候,并不关心二次规划问题的求解细节,所以一般是把二次规划问题建立好后,直接调用三方库进行求解。因为约束为非线性约束,所以先将约束进行线性化,约束原方程为。

zmhzmhzm的博客 1万+

SceneSplat

目标:训练一个网络,输入高斯参数 → 输出与自然语言空间对齐的特征。考虑到标注语义的 3DGS 数据有限,作者设计了。策略,让模型在无标签场景上学到有用表征。都有一个与自然语言对齐的语义特征。这是整个方法的第一步,目标是让。

weixin_61091146的博客 1284

布隆过滤器(Bloom Filter)-使用原理和场景

布隆过滤器 Bloom Filter

m0_38068812的博客 1997

DOORS需求管理实战:从汽车设计案例看模块化需求拆分技巧

本文通过一个汽车设计实战案例,深入解析了如何利用DOORS进行模块化需求拆分与管理。从捕获原始用户需求到精炼为可追踪的系统需求,再到按子系统(如自动驾驶)进行模块化拆分,文章详细展示了构建需求骨架、建立可追溯性以及实施变更控制的完整流程,帮助团队在复杂系统工程中实现从混沌到秩序的高效协同。

ww90123的博客 244

Bitmap 与布隆过滤器:大数据场景下的原理与取舍

Bitmap 和布隆过滤器都利用 bit 级表示来降低存储成本,Bitmap 适合精确表示整数集合,尤其适合 ID 连续或可压缩映射的场景,布隆过滤器适合大规模存在性判断,尤其适合快速排除不存在的数据。

weixin_47983718的博客 341

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

布隆过滤器:原理、应用场景与示例

布隆过滤器是一种高效且节省空间的数据结构,适用于大规模数据集合的存在性检测。尽管它存在假阳性率,但在很多实际应用场景中,假阳性是可以容忍的,特别是在缓存穿透、重复提交防止、URL 去重等场景中,布隆过滤器能够有效地提高性能和减少资源消耗。

fanjinglian_的博客 2577

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

布隆过滤器原理与使用场景

布隆过滤器简介 布隆过滤器(Bloom Filter)是由布隆( Burton Howard Bloom )在 1970 年提出的。它由一个很长的二进制向量 (位向量) 和一系列随机均匀分布的散列 (哈希) 函数组成。用多个散列函数,将每个数据映射到位数组中,这样可以高效地插入元素或者判断某个元素可能存在与一定不存在,而且可以减少内存空间开销。 假设: 数据集A=A =A={a1,a2,⋯ ,ana_1,a_2,\cdots,a_na1​,a2​,⋯,an​},即有 n 个元素。 布隆过滤器用一个长为 m

浩然然然的博客 395

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

布隆过滤器:原理、实现与海量场景应用解析

布隆过滤器是一种高效的概率型数据结构,用于快速判断元素是否存在海量集合中。其核心由二进制位数组和多个哈希函数组成,通过计算元素哈希值并标记对应位置来实现快速查询。布隆过滤器具有空间效率高、查询速度快的特点,但存在可控的假阳性概率,且不支持元素删除。典型应用包括防止Redis缓存穿透、爬虫URL去重等场景。文章通过Java代码实现了布隆过滤器核心逻辑,并展示了如何结合Redis构建三级防穿透机制,有效拦截不存在的查询请求,保护数据库免受恶意攻击。

2301_80342544的博客 1164

布隆过滤器深度实战:详解原理、场景与SpringBoot+Redis高性能实现

【全网最硬核布隆过滤器指南】万字长文从哈希碰撞本质出发,深度剖析布隆过滤器的位数组与多哈希函数核心机制,结合Google Guava与Redisson源码解读,手把手教你通过SpringBoot+Redis构建支持动态扩容的工业级布隆过滤器。本文不仅详解误判率公式推导与参数调优方法论,更包含缓存穿透防护、十亿级数据去重等6大真实场景解决方案,最后通过JMeter压测验证过滤器性能,助你掌握这个让数据库查询性能翻倍的核心技术。随文附赠可动态扩容的布隆过滤器SpringBoot工程源码,技术深度与实战价值兼备!

Zyw907155124的博客 2万+

布隆过滤器原理分析、应用场景、与redis使用案例

布隆过滤器通过牺牲少量准确性换取高空间效率和快速查询,适用于对误判率可容忍的场景。其核心在于合理选择位数组长度 m、哈希函数数量 k 和预估元素数量 n,并通过哈希函数均匀分布元素以降低误判率。变种方案如计数布隆过滤器和动态布隆过滤器进一步扩展了其应用范围。

oGuiGui12345的博客 942

【Redis】 高级类型与布隆过滤器 原理+场景全解析

摘要:Redis高级功能与布隆过滤器详解 本文深入解析Redis的四大高级功能:HyperLogLog(基数统计,低内存高误差)、Bitmap(二进制状态存储,精准高效)、Geo(地理位置服务,基于ZSet)和Stream(专业消息队列,支持消费组)。同时详解布隆过滤器的原理与应用,特别强调其在解决缓存穿透问题中的作用。文章对比了Bitmap与HyperLogLog的核心区别,并总结了各功能的适用场景,为后端开发与面试提供实用参考。

2401_89675417的博客 654

布隆过滤器:高并发场景下的“防穿透神器”,原理与实战全解析

布隆过滤器是一种高效的空间概率型数据结构,用于快速判断元素是否存在于集合中。它通过bit数组和多个哈希函数实现,具有空间效率高、查询速度快的特点,但存在一定误判率且不支持删除操作。主要应用于缓存穿透防御、海量数据去重等场景,能有效拦截无效请求,保护底层数据库。使用时需合理设置参数控制误判率,并配合二次校验等补救措施。虽然实现简单,但需注意其局限性,如无法动态调整参数和不支持删除等特性。

编程改变世界。想做一些改变世界的产品。感谢一键三连。 815

【布隆过滤器(Bloom Filter)基本概念与原理、Bloom Filter优点与缺点、以及应用场景】

【布隆过滤器(Bloom Filter)基本概念与原理、Bloom Filter优点与缺点、以及应用场景】关于布隆过滤器基本概念与原理、Bloom Filter优点与缺点、以及应用场景就先介绍到这里,当然关于布隆过滤器相关的知识还有很多内容并没有讲到,这个就需要你先看懂这些,然后再一步深入学习。如果对你有帮助,就留下你的小关注吧!

Coder_ljw的博客 1105

【SQL/软考 数据库必备:布隆过滤器原理、作用、问题与实战场景全解析】

布隆过滤器是一种空间效率极高的概率型数据结构,通过位数组和多个哈希函数实现快速元素存在性判断。它能100%确定元素不存在,但可能存在误判(假阳性)。核心优势是极低的内存占用和O(1)查询速度,特别适合解决海量数据下的缓存穿透问题。主要应用于数据库缓存防护、黑名单过滤、大数据去重等场景。标准布隆过滤器不支持删除,计数变种通过计数器实现删除功能。误判率可通过公式精确控制,通常需要权衡空间与准确性。在数据库架构中,布隆过滤器能有效拦截无效查询,显著降低数据库压力,是大数据场景下的高效优化工具。

一起学习进步! 735

从红黑树到哈希表:原理对比与典型场景应用解析(分布式以及布隆过滤器)

摘要本文围绕数据结构在高效查找与大规模数据处理中的应用,对比分析了红黑树与哈希表的核心特性,并扩展介绍了布隆过滤器与分布式一致性哈希的原理及实践。1. 红黑树:平衡有序的经典方案红黑树作为自平衡二叉查找树,通过严格的节点颜色规则(根黑、叶黑、红节点无子红、黑高平衡)维持树的平衡,确保插入、删除、查找的时间复杂度稳定在 \(O(\log n)\),适用于需要范围查询(如数据库索引、优先级队列)的有序数据场景。但其路径依赖的比较式搜索和平衡调整开销,在单键快速查找场景中存在冗余,有序性反而成为负担。2. 哈希表

m0_73359068的博客 1271

玩转Redis-Redis中布隆过滤器的使用及原理

《玩转Redis》系列文章主要讲述Redis的基础及中高级应用。本文是《玩转Redis》系列第【11】篇,本文关键字:玩转Redis、Bloom filter、布隆过滤器、无偏hash函数; - 布隆过滤器的底层原理 - 布隆过滤器的底层结构 - 最佳hash函数数量与错误率的关系 - 所需存储空间与错误率及容量关系 - 布隆过滤器如何扩容 - 布隆过滤器有哪些应用场景 - 布隆过滤器的优缺点 - 延伸拓展

zxiaofan.com 9238

Google布隆过滤器与Redis布隆过滤器详解

一、什么是布隆过滤器? 布隆过滤器可以用来判断一个元素是否在一个集合中。它的优势是只需要占用很小的内存空间以及有着高效的查询效率。 对于布隆过滤器而言,它的本质是一个位数组:位数组就是数组的每个元素都只占用1bit ,并且每个元素只能是0或者1 布隆过滤器除了一个位数组,还有 K 个哈希函数。当一个元素加入布隆过滤器中的时候,会进行如下操作: 使用K个哈希函数对元素值进行K次计算,得到K个哈希值...

hxt的博客 3647
上一篇: 从LongAdder说到内存伪共享
下一篇: Elasticsearch 集群基本概念
Kindle_code
博客等级 码龄12年 21粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值