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

redis中使用bloomfilter的白名单功能解决缓存穿透问题

一 缓存预热

1.1 缓存预热

将需要的数据提前缓存到缓存redis中,可以在服务启动时候,或者在使用前一天完成数据的同步等操作。保证后续能够正常使用。

1.2 缓存穿透

在redis中,查询redis缓存数据没有内容,接着查询mysql数据库,也没有需要的内容,做了两次无用的查询。进而造成mysql数据库的负担,造成一系列的风险。

解决办法:bloomfilter+白名单实现过滤。

1.3 白名单的作用

白名单里面有才让允许通过,没有的内容则不允许通过。但是存在误判的情况,比如bloomfilter中存在查询的内容且允许通过,但是并不是我们真正需要的那个内容。

 1.4 白名单入门案例

public class WhiteList {public static void main(String[] args) {testGuavaWithBloomFilter();}public static void testGuavaWithBloomFilter(){//1 创建guava版布隆过滤器BloomFilter<Integer> bloomFilter = BloomFilter.create(Funnels.integerFunnel(), 100);//2 判断指定的元素是否存在System.out.println(bloomFilter.mightContain(1));System.out.println(bloomFilter.mightContain(2));System.out.println();//3 讲元素新增进入bloomfilterbloomFilter.put(1);bloomFilter.put(2);System.out.println(bloomFilter.mightContain(1));System.out.println(bloomFilter.mightContain(2));}
}

结果:

1.5 白名单+过滤器的实现案例

逻辑:   guava布隆过滤器插入100万样本数据并额外10W测试是否存在,这10w的数据在100w的数据可能存在相同的情况,存储到相同位置。比如规则为m%3,则 1,4,7放到同一个位置槽中。

 1.5.1 代码逻辑

1.controller

@RestController
@Slf4j
public class GuvaFilter {@Resourceprivate GuavaBloomFilterService guavaBloomFilterService;@ApiOperation("guava布隆过滤器插入100万样本数据并额外10W测试是否存在")@RequestMapping(value = "/guavafilter",method = RequestMethod.GET)public void guavaBloomFilter(){guavaBloomFilterService.guavaBloomFilter();}
}

2.service

@Service
@Slf4j
public class GuavaBloomFilterService
{//1 定义一个常量public static final int _1W = 10000;//2 定义我们guava布隆过滤器,初始容量public static final int SIZE = 100 * _1W;//3 误判率,它越小误判的个数也就越少(思考,是否可以是无限小??没有误判岂不是更好)public static double fpp = 0.01;//0.01 0.000000000000001//4 创建guava布隆过滤器private static BloomFilter<Integer> bloomFilter = BloomFilter.create(Funnels.integerFunnel(), SIZE,fpp);public void guavaBloomFilter(){//1 先让bloomFilter加入100W白名单数据for (int i = 1; i <= SIZE  ; i++) {bloomFilter.put(i);}//2 故意取10W个不在合法范围内的数据,来进行误判率的演示ArrayList<Integer> list = new ArrayList<>(10 * _1W);//3 验证for (int i = SIZE+1; i <= SIZE+(10 * _1W) ; i++){if(bloomFilter.mightContain(i)){log.info("被误判了:{}",i);list.add(i);}}log.info("误判总数量:{}",list.size());}
}

3.截图

控制台打印日志:

1.7 bloomfilter总结

bloomfilter作用:查询的内容A,一定不存在,在过滤器中查询肯定没有;如果存在,但是存在误判的情况,但是误判率很小,可以忽略。

1.7 黑名单的使用

黑名单:在黑名单的存在的内容,就不再推荐;不存在则推荐。

应用案例: 抖音等媒体的推荐内容。

相关文章:

redis中使用bloomfilter的白名单功能解决缓存穿透问题

一 缓存预热 1.1 缓存预热 将需要的数据提前缓存到缓存redis中&#xff0c;可以在服务启动时候&#xff0c;或者在使用前一天完成数据的同步等操作。保证后续能够正常使用。 1.2 缓存穿透 在redis中&#xff0c;查询redis缓存数据没有内容&#xff0c;接着查询mysql数据库&…...

Spring Boot 2.7.8以后mysql-connector-java与mysql-connector-j

错误信息 如果升级到Spring Boot 2.7.8&#xff0c;可以看到因为找不到mysql-connector-java依赖而出现错误。 配置&#xff1a; <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId>&l…...

03|「如何写好一个 Prompt」

前言 Prompt 文章目录 前言一、通用模板和范式1. 组成2. 要求1&#xff09;文字描述2&#xff09;注意标点符号 一、通用模板和范式 1. 组成 指令&#xff08;角色&#xff09; 生成主体 额外要求 指令&#xff1a;模型具体完成的任务描述。例如&#xff0c;翻译一段文字&…...

关于提示词 Prompt

Prompt原则 原则1 提供清晰明确的指示 注意在提示词中添加正确的分割符号 prompt """ 请给出下面文本的摘要&#xff1a; <你的文本> """可以指定输出格式&#xff0c;如&#xff1a;Json、HTML提示词中可以提供少量实例&#xff0c;…...

【Linux多线程】线程的互斥与同步(附抢票案例代码+讲解)

线程的互斥与同步 &#x1f4ab; 概念引入⭐️临界资源&#xff08;Critical Resource&#xff09;&#xff1a;&#x1f31f;临界区&#xff08;Critical Section&#xff09;&#xff1a;✨互斥&#xff08;Mutex&#xff09;&#xff1a; ⚡️结合代码看互斥☄️ 代码逻辑&a…...

ajax概述

目录 1.什么是ajax 2.ja原生ajax 3.jQuery框架的ajax 4.综合案例 1.什么是ajax Ajax 即"Asynchronous Javascript And XML"&#xff08;异步 JavaScript 和 XML&#xff09;&#xff0c;是指一种创建交互式网页应用的网页开发技术。Ajax 异步 JavaScript 和 XML&…...

小白带你学习linux的mysql服务(主从mysql服务和读写分离三十一)

目录 二、MySQL Replication优点&#xff1a; 三、MySQL复制类型 1、异步复制&#xff08;Asynchronous repication&#xff09; 2、全同步复制&#xff08;Fully synchronous replication&#xff09; 3、半同步复制&#xff08;Semisynchronous replication&#xff09;…...

【低代码专题方案】iPaaS运维方案,助力企业集成平台智能化高效运维

01 场景背景 随着IT行业的发展和各家企业IT建设的需要&#xff0c;信息系统移动化、社交化、大数据、系统互联、数据打通等需求不断增多&#xff0c;企业集成平台占据各个企业领域&#xff0c;成为各业务系统数据传输的中枢。 集成平台承接的业务系统越多&#xff0c;集成平台…...

Android SDK 上手指南||第一章 环境需求||第二章 IDE:Eclipse速览

第一章 环境需求 这是我们系列教程的第一篇&#xff0c;让我们来安装Android的开发环境并且把Android SDK运行起来&#xff01; 介绍 欢迎来到Android SDK入门指南系列文章&#xff0c;如果你想开始开发Android App&#xff0c;这个系列将从头开始教你所须的技能。我们假定你…...

Amazon Linux上使用ec2-user来设置开机自启动的shell脚本

要在Amazon Linux上使用ec2-user来设置开机自启动的shell脚本&#xff0c;可以按照以下步骤操作&#xff1a; 1. 确保您拥有要设置自启动的shell脚本。假设脚本的路径是/home/ec2-user/myscript.sh。 2. 使用以下命令打开/etc/rc.d/rc.local文件&#xff1a; shell sudo nano /…...

【Spring】Spring 下载及其 jar 包

根据 【动力节点】最新Spring框架教程&#xff0c;全网首套Spring6教程&#xff0c;跟老杜从零学spring入门到高级 以及老杜的原版笔记 https://www.yuque.com/docs/share/866abad4-7106-45e7-afcd-245a733b073f?# 《Spring6》 进行整理&#xff0c; 文档密码&#xff1a;mg9b…...

蓝桥杯2023年第十四届省赛-飞机降落

题目描述 N 架飞机准备降落到某个只有一条跑道的机场。其中第 i 架飞机在 Ti 时刻到达机场上空&#xff0c;到达时它的剩余油料还可以继续盘旋 Di 个单位时间&#xff0c;即它最早 可以于 Ti 时刻开始降落&#xff0c;最晚可以于 Ti Di 时刻开始降落。降落过程需要 Li个单位时…...

STM32 串口实验(学习一)

本章将实现如下功能&#xff1a;STM32通过串口和上位机对话&#xff0c;STM32在收到上位机发过来的字符串后&#xff0c;原原本本返回给上位机。 STM32 串口简介 串口作为MCU的重要外部接口&#xff0c;同时也是软件开发重要的调试手段&#xff0c;其重要性不言而喻。现在基本…...

多臂治疗规则的 Qini 曲线(Stefan Wager)

英文题目&#xff1a; Qini Curves for Multi-Armed Treatment Rules 中文题目&#xff1a;多臂治疗规则的 Qini 曲线 单位&#xff1a;Stefan Wager 论文链接&#xff1a; 代码&#xff1a;GitHub - grf-labs/maq: Treatment rule evaluation via the multi-armed Qini …...

NOSQL之Redis配置及优化

目录 一、关系型数据库 二、非关系型数据库 三、关系型数据库和非关系型数据库区别 1、数据存储方式不同 2、扩展方式不同 3、对事务性的支持不同 四、Redis简介 五、Redis优点 &#xff08;1&#xff09;具有极高的数据读写速度 &#xff08;2&#xff09;支持丰富的…...

植物一区HR | 植物生理组+转录组:揭示豆科植物响应干旱胁迫机制

PlantArray 植物高通量生理学表型监测系统 是一套以植物生理学为基础的高精度&#xff0c;高通量&#xff0c;自动化表型监测系统&#xff0c;集合实验设置、数据分析、决策工具于一身&#xff0c;能够高通量实时动态监测并进行全天候生理及环境参数采集&#xff0c;是进行植物…...

TCP粘包问题

TCP粘包问题 TCP粘包问题造成TCP粘包的原因发送方原因接收方原因 如何处理TCP粘包发送方接收方应用层 为什么UDP没有粘包问题 TCP粘包问题 TCP粘包就是指发送方发送的若干包数据到达接收方时粘成了一包&#xff0c;从接收缓冲区来看&#xff0c;后一包数据的头紧接着前一包数据…...

QT【day1】

登录框&#xff1a; #include "mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {//窗口设置this->setFixedSize(600,600); //大小this->setWindowTitle("MUMU"); //文本内容this->setWindowOpacity(0.8); //透…...

【Golang】Golang进阶系列教程--为什么 Go 不支持 []T 转换为 []interface

文章目录 前言官方解释内存布局程序运行中的内存布局通用方法 前言 在 Go 中&#xff0c;如果 interface{} 作为函数参数的话&#xff0c;是可以传任意参数的&#xff0c;然后通过类型断言来转换。 举个例子&#xff1a; package mainimport "fmt"func foo(v inter…...

两数相加 II——力扣445

题目描述 法一 栈 本题旨在从后往前加&#xff0c;为了逆序处理所有数位&#xff0c;利用栈&#xff0c;把数字压入栈中&#xff0c;再依次取出相加&#xff0c;注意进位&#xff01;进位是/10&#xff0c;另外需要注意栈的常用函数&#xff0c;push()、pop()、top()&#xff0…...

Win11Debloat:彻底解放Windows性能的智能优化革命

Win11Debloat&#xff1a;彻底解放Windows性能的智能优化革命 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and custom…...

SmartBI白泽V5破局企业级AI落地难题,推动数据分析进入新阶段

BI接入AI后的企业新挑战BI接入AI之后&#xff0c;很多企业惊喜地发现&#xff0c;业务人员终于不用写SQL了&#xff0c;输入一句话就能查到数据。然而&#xff0c;真正进入严肃的经营分析场景&#xff0c;企业很快遭遇了新的“灵魂拷问”&#xff1a;老板问“为什么利润下降”&…...

3分钟掌握md2pdf:离线Markdown转PDF的终极指南

3分钟掌握md2pdf&#xff1a;离线Markdown转PDF的终极指南 【免费下载链接】md2pdf Offline markdown to pdf, choose -> edit -> transform &#x1f942; 项目地址: https://gitcode.com/gh_mirrors/md/md2pdf 你是否经常需要将Markdown文档转换为PDF格式&#…...

Monocle投票系统实现原理:构建高效的帖子排名算法

Monocle投票系统实现原理&#xff1a;构建高效的帖子排名算法 【免费下载链接】monocle Link and news sharing 项目地址: https://gitcode.com/gh_mirrors/mon/monocle Monocle是一个功能强大的链接和新闻聚合平台&#xff0c;其核心功能之一就是智能投票排名系统。这篇…...

量子优化新突破:虚时间演化高效求解QUBO问题

1. 量子优化新范式&#xff1a;模拟虚时间演化解决QUBO问题在金融投资组合优化、物流路径规划和机器学习特征选择等领域&#xff0c;二次无约束二进制优化&#xff08;QUBO&#xff09;问题无处不在。这类NP难问题随着规模扩大&#xff0c;求解难度呈指数级增长&#xff0c;传统…...

抖音内容自动化下载:3大技术挑战与实战解决方案

抖音内容自动化下载&#xff1a;3大技术挑战与实战解决方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖…...

Adobe-GenP 3.0:解锁Adobe全家桶专业功能的简易指南

Adobe-GenP 3.0&#xff1a;解锁Adobe全家桶专业功能的简易指南 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 还在为Adobe Creative Cloud的高昂订阅费用而烦恼吗…...

Unity程序化建筑生成系统:性能可控的城市场景管线

1. 这不是“又一个建筑生成插件”&#xff0c;而是我替团队踩了三年坑后重写的底层逻辑在Unity里做城市场景&#xff0c;你肯定经历过&#xff1a;美术手搭一栋楼要两天&#xff0c;程序写个随机生成器跑出来全是穿模、面数爆炸、光照崩坏的“鬼楼”&#xff1b;或者用现成插件…...

AGENTS半自主智能体架构:状态驱动的可追溯可恢复Agent系统

1. 项目概述&#xff1a;这不是又一个“Agent框架”&#xff0c;而是一次LLM应用范式的重新校准“Inside AGENTS”这个标题里藏着三个关键信号&#xff1a;Inside——它不是教你怎么用&#xff0c;而是带你钻进引擎舱看活塞怎么运动&#xff1b;AGENTS——大写的复数&#xff0…...

深入Linux内核:图解PTP硬件时间戳(HW Timestamp)从网卡到用户空间的完整路径

深入Linux内核&#xff1a;图解PTP硬件时间戳从网卡到用户空间的完整路径 1. 高精度时间同步的技术演进与PTP核心价值 在分布式系统与工业自动化领域&#xff0c;微秒级甚至纳秒级的时间同步已成为刚需。传统NTP协议受限于软件实现和网络抖动&#xff0c;精度通常只能达到毫秒级…...