当前位置: 首页 > article >正文

Redis-布隆过滤器

文章目录

      • 布隆过滤器的特点:
      • 实践布隆过滤器
      • 应用

布隆过滤器的特点:

就可以把布隆过滤器理解为一个set集合,我们可以通过add往里面添加元素,通过contains来判断是否包含某个元素

布隆过滤器是一个很长的二进制向量和一系列随机映射函数。 可以用来检索一个元素是否存在一个集合中,优点是空间效率和时间都比一般算法要好,缺点是存在一定的误判和删除困难。 因为 hash 冲突的存在,可能会有误判的概率。

应用场景包括下面:

布隆过滤器的特点:

结构图:

查询的时间复杂度是 O(N) n 是 hash 函数的数量。

如果某个位置为 0,可以一定判断不存在,但是某个位置不为 0 不能就肯定一定存在 mysql 中.

实践布隆过滤器

底层使用的位图数据结构。

import redis.clients.jedis.Jedis;
import java.nio.charset.StandardCharsets;
import java.util.BitSet;
import java.util.List;
import java.util.ArrayList;public class RedisBloomFilter {private static final String BLOOM_FILTER_KEY = "bloom_filter";private static final int BITMAP_SIZE = 1000000; // 位图大小private static final int[] HASH_SEEDS = {3, 5, 7, 11, 13, 17}; // 多个哈希函数的种子private Jedis jedis;private List<SimpleHash> hashFunctions;public RedisBloomFilter() {this.jedis = new Jedis("localhost", 6379);this.hashFunctions = new ArrayList<>();for (int seed : HASH_SEEDS) {hashFunctions.add(new SimpleHash(BITMAP_SIZE, seed));}}// 添加元素到布隆过滤器public void add(String value) {for (SimpleHash hashFunction : hashFunctions) {jedis.setbit(BLOOM_FILTER_KEY, hashFunction.hash(value), true);}}// 检查元素是否可能存在于布隆过滤器中public boolean mightContain(String value) {for (SimpleHash hashFunction : hashFunctions) {if (!jedis.getbit(BLOOM_FILTER_KEY, hashFunction.hash(value))) {return false;}}return true;}// 关闭连接public void close() {jedis.close();}// 简单哈希函数public static class SimpleHash {private int cap;private int seed;public SimpleHash(int cap, int seed) {this.cap = cap;this.seed = seed;}public int hash(String value) {int result = 0;byte[] bytes = value.getBytes(StandardCharsets.UTF_8);for (byte b : bytes) {result = seed * result + b;}// 让hash分布的均匀一谢return (cap - 1) & result;}}public static void main(String[] args) {RedisBloomFilter bloomFilter = new RedisBloomFilter();// 添加元素到布隆过滤器bloomFilter.add("user1");bloomFilter.add("user2");bloomFilter.add("user3");// 检查元素是否可能存在System.out.println("Does user1 exist? " + bloomFilter.mightContain("user1")); // 输出: trueSystem.out.println("Does user4 exist? " + bloomFilter.mightContain("user4")); // 输出: false// 关闭连接bloomFilter.close();}
}

应用

IP 黑名单:

https://blog.csdn.net/m0_56079407/article/details/127046242

参考文章:

https://blog.csdn.net/qq_41125219/article/details/119982158

相关文章:

Redis-布隆过滤器

文章目录 布隆过滤器的特点:实践布隆过滤器应用 布隆过滤器的特点: 就可以把布隆过滤器理解为一个set集合&#xff0c;我们可以通过add往里面添加元素&#xff0c;通过contains来判断是否包含某个元素。 布隆过滤器是一个很长的二进制向量和一系列随机映射函数。 可以用来检索…...

OpenCV 版本不兼容导致的问题

问题和解决方案 今天运行如下代码&#xff0c;发生了意外的错误&#xff0c;代码如下&#xff0c;其中输入的 frame 来自于 OpenCV 开启数据流的读取 """ cap cv2.VideoCapture(RTSP_URL) print("链接视频流完成") while True:ret, frame cap.rea…...

【视频+图文详解】HTML基础3-html常用标签

图文教程 html常用标签 常用标签 1. 文档结构 <!DOCTYPE html>&#xff1a;声明HTML文档类型。<html>&#xff1a;定义HTML文档的根元素。<head>&#xff1a;定义文档头部&#xff0c;包含元数据。<title>&#xff1a;设置网页标题&#xff0c;浏览…...

【B站保姆级视频教程:Jetson配置YOLOv11环境(五)Miniconda安装与配置】

Jetson配置YOLOv11环境&#xff08;5&#xff09;Miniconda安装与配置 文章目录 0. Anaconda vs Miniconda in Jetson1. 下载Miniconda32. 安装Miniconda33. 换源3.1 conda 换源3.2 pip 换源 4. 创建环境5. 设置默认启动环境 0. Anaconda vs Miniconda in Jetson Jetson 设备资…...

【PLL】杂散生成和调制

时钟生成 --》 数字系统 --》峰值抖动频率生成 --》无线系统 --》 频谱纯度、 周期信号的相位不确定性 随机抖动&#xff08;random jitter, RJ&#xff09;确定性抖动&#xff08;deterministic jitter,DJ&#xff09; 时域频域随机抖动积分相位噪声确定性抖动边带 杂散生成和…...

游戏引擎 Unity - Unity 启动(下载 Unity Editor、生成 Unity Personal Edition 许可证)

Unity Unity 首次发布于 2005 年&#xff0c;属于 Unity Technologies Unity 使用的开发技术有&#xff1a;C# Unity 的适用平台&#xff1a;PC、主机、移动设备、VR / AR、Web 等 Unity 的适用领域&#xff1a;开发中等画质中小型项目 Unity 适合初学者或需要快速上手的开…...

侯捷 C++ 课程学习笔记:深入理解 C++ 核心技术与实战应用

目录 引言 第一章&#xff1a;C 基础回顾 1.1 C 的历史与发展 1.2 C 的核心特性 1.3 C 的编译与执行 第二章&#xff1a;面向对象编程 2.1 类与对象 2.2 构造函数与析构函数 2.3 继承与多态 第三章&#xff1a;泛型编程与模板 3.1 函数模板 3.2 类模板 3.3 STL 容器…...

Java的Integer缓存池

Java的Integer缓冲池&#xff1f; Integer 缓存池主要为了提升性能和节省内存。根据实践发现大部分的数据操作都集中在值比较小的范围&#xff0c;因此缓存这些对象可以减少内存分配和垃圾回收的负担&#xff0c;提升性能。 在-128到 127范围内的 Integer 对象会被缓存和复用…...

【C++动态规划 离散化】1626. 无矛盾的最佳球队|2027

本文涉及知识点 C动态规划 离散化 LeetCode1626. 无矛盾的最佳球队 假设你是球队的经理。对于即将到来的锦标赛&#xff0c;你想组合一支总体得分最高的球队。球队的得分是球队中所有球员的分数 总和 。 然而&#xff0c;球队中的矛盾会限制球员的发挥&#xff0c;所以必须选…...

python 判断复杂包含

目录 python 判断复杂包含 a和b都是拍好序的&#xff1a; python 判断复杂包含 a[10,13,15] b[[9,11],[11,13],[13,16]] b的子项是区间&#xff0c;返回b中子区间包含a其中元素的子项 if __name__ __main__:a [10, 11, 15]b [[9, 11], [11, 13], [13, 16]]# 筛选出包含…...

Teleporters( Educational Codeforces Round 126 (Rated for Div. 2) )

Teleporters&#xff08; Educational Codeforces Round 126 (Rated for Div. 2) &#xff09; There are n 1 n1 n1 teleporters on a straight line, located in points 0 0 0, a 1 a_1 a1​, a 2 a_2 a2​, a 3 a_3 a3​, …, a n a_n an​. It’s possible to tele…...

css-设置元素的溢出行为为可见overflow: visible;

1.前言 overflow 属性用于设置当元素的内容溢出其框时如何处理。 2. overflow overflow 属性的一些常见值&#xff1a; 1 visible&#xff1a;默认值。内容不会被剪裁&#xff0c;会溢出元素的框。 2 hidden&#xff1a;内容会被剪裁&#xff0c;不会显示溢出的部分。 3 sc…...

python-leetcode-从中序与后序遍历序列构造二叉树

106. 从中序与后序遍历序列构造二叉树 - 力扣&#xff08;LeetCode&#xff09; # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right r…...

绝对值线性化

函数中的绝对值线性化有多种方法&#xff0c;包括我之前的一篇博文. 前几天在小红书刷到一个帖子&#xff0c;一位网友提供了另外一种巧妙的方式&#xff0c;记录如下。 假如有一个绝对值表达式&#xff1a; y ∣ a x − b ∣ (1) y|ax-b|\tag{1} y∣ax−b∣(1) 令&#x…...

Java实战:图像浏览器

文章目录 1. 实战概述2. 知识准备3. 实现步骤3.1 创建Java项目3.2 创建图像浏览器类3.2.1 声明变量与常量3.2.2 创建构造方法3.2.3 创建初始化界面方法3.2.4 创建处理事件方法3.2.5 创建主方法3.2.6 查看完整代码 3.3 运行程序&#xff0c;查看结果 4. 实战小结5. 扩展练习 1. …...

SARIMA介绍

SARIMA模型&#xff0c;即季节性自回归积分移动平均模型&#xff08;Seasonal Autoregressive Integrated Moving Average Model&#xff09;&#xff0c;是一种用于处理和预测具有明显季节性变化的时间序列数据的统计模型。它是ARIMA模型的一种扩展&#xff0c;通过引入额外的…...

I.MX6ULL 中断介绍上

i.MX6ULL是NXP&#xff08;原Freescale&#xff09;推出的一款基于ARM Cortex-A7内核的微处理器&#xff0c;广泛应用于嵌入式系统。在i.MX6ULL中&#xff0c;中断&#xff08;Interrupt&#xff09;是一种重要的机制&#xff0c;用于处理外部或内部事件&#xff0c;允许微处理…...

Spring Boot WebMvcConfigurer:定制你的 Web 应用

在构建基于Spring Boot的Web应用程序时&#xff0c;WebMvcConfigurer接口扮演着至关重要的角色。它允许开发者以一种简洁且非侵入的方式自定义Spring MVC的功能&#xff0c;而无需直接扩展框架的核心组件。本文将深入探讨WebMvcConfigurer的作用、如何实现其方法以及在实际项目…...

(即插即用模块-特征处理部分) 十九、(NeurIPS 2023) Prompt Block 提示生成 / 交互模块

文章目录 1、Prompt Block2、代码实现 paper&#xff1a;PromptIR: Prompting for All-in-One Blind Image Restoration Code&#xff1a;https://github.com/va1shn9v/PromptIR 1、Prompt Block 在解决现有图像恢复模型时&#xff0c;现有研究存在一些局限性&#xff1a; 现有…...

单链表专题(中)

我们接着上一篇文章&#xff0c;继续对单链表的实现进行扩充 链表的头删 我们在进行头删的时候&#xff0c;不能先释放掉头节点再将头节点传到第二节点上&#xff0c;这样会导致找不到第二个节点了 void SLTPopFront(SLTNode** pphead) {assert(pphead && *pphead);…...

表格结构标签

<!-- thead表示表格的头部 tbody表示表格的主体 --> <thead></thead> <tbody></tbody> <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content&q…...

A星算法两元障碍物矩阵转化为rrt算法四元障碍物矩阵

对于a星算法obstacle所表示的障碍物障碍物信息&#xff0c;每行表示一个障碍物的坐标&#xff0c;例如2 , 3; % 第一个障碍物在第二行第三列&#xff0c;也就是边长为1的正方形障碍物右上角横坐标是2&#xff0c;纵坐标为3&#xff0c;障碍物的宽度和高度始终为1.在rrt路径规划…...

MySQL数据库(二)- SQL

目录 ​编辑 一 DDL (一 数据库操作 1 查询-数据库&#xff08;所有/当前&#xff09; 2 创建-数据库 3 删除-数据库 4 使用-数据库 (二 表操作 1 创建-表结构 2 查询-所有表结构名称 3 查询-表结构内容 4 查询-建表语句 5 添加-字段名数据类型 6 修改-字段数据类…...

数据分析系列--⑦RapidMiner模型评价(基于泰坦尼克号案例含数据集)

一、前提 二、模型评估 1.改造⑥ 2.Cross Validation算子说明 2.1Cross Validation 的作用 2.1.1 模型评估 2.1.2 减少过拟合 2.1.3 数据利用 2.2 Cross Validation 的工作原理 2.2.1 数据分割 2.2.2 迭代训练与测试 ​​​​​​​ 2.2.3 结果汇总 ​​​​​​​ …...

19 压测和常用的接口优化方案

高并发的平台应用&#xff0c;项目上线前离不开一个重要步骤就是压测&#xff0c;压测对于编码中的资源是否问题的排查&#xff0c;性能的调优都是离不开的。测试还要做测试报告&#xff0c;出具了测试报告给到运维团队才能上线。 压测的测试报告主要有以下几个方面:1.响应时间…...

gentoo中利用ollama运行DeepSeek-R1

一、安装ollama gentoo linux中 1.安装步骤&#xff1a; Step1. #cd /usr/local/src Step2. #wget2 -o -V https://ollama.com/install.sh Setp3. #sh ./install.sh 2.ollama完成安装。查看ollama版本&#xff1a; 3.查看ollama服务运行状态&#xff1a; 二、安装&#xf…...

远程连接-简化登录

vscode通过ssh连接远程服务器免密登录&#xff08;图文&#xff09;_vscode ssh-CSDN博客...

PHP中配置 variables_order详解

variables_order 是 PHP 配置文件 php.ini 中的一项配置指令&#xff0c;决定了 PHP 在处理请求时&#xff0c;哪些类型的变量将被注册到全局变量空间&#xff08;如 $GLOBALS&#xff09;中&#xff0c;以及这些变量的顺序。理解和正确配置 variables_order 对于开发和维护安全…...

为什么推荐将静态资源放在CDN上?

1. CDN 是什么&#xff1f; CDN&#xff08;Content Delivery Network&#xff09;是一种分布式网络&#xff0c;由地理上分散的服务器节点组成。其主要功能是将静态资源缓存到各地的边缘服务器上&#xff0c;从而将内容更快地传递给用户。当用户请求资源时&#xff0c;CDN 会…...

【NEXT】网络编程——上传文件(不限于jpg/png/pdf/txt/doc等),或请求参数值是file类型时,调用在线服务接口

最近在使用华为AI平台ModelArts训练自己的图像识别模型&#xff0c;并部署了在线服务接口。供给客户端&#xff08;如&#xff1a;鸿蒙APP/元服务&#xff09;调用。 import核心能力&#xff1a; import { http } from kit.NetworkKit; import { fileIo } from kit.CoreFileK…...