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

news2024/11/21 0:38:30

一 缓存预热

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 讲元素新增进入bloomfilter
        bloomFilter.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 {
    @Resource
    private 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 黑名单的使用

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

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

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

63、故障处理之快速恢复数据

数据丢失快速恢复的重要性 目的&#xff1a;尽快修复数据&#xff0c;恢复业务 快速恢复相关技术对比 常用备份恢复技术 数据快速恢复原理 MVCC 是TiDB数据库原生的一项功能&#xff0c;默认使用无需配置&#xff0c;它使用多个历史快照的方式来维护数据在某个时间点对并…

Python案例|使用Scikit-learn进行房屋租金回归分析

回归分析是一种预测性的建模技术&#xff0c;研究的是因变量&#xff08;目标&#xff09;和自变量&#xff08;预测器&#xff09;之间的关系。回归分析是建模和分析数据的重要工具。比如预测股票价格走势、预测居民收入、预测微博互动量等等。常用的有线性回归、逻辑回归、岭…

软路由r2s简单刷固件openwrt教程

r2s软件介绍 NanoPi R2S 是 FriendlyELEC&#xff08;友善电子&#xff09;推出的一款单板计算机&#xff0c;它是 NanoPi 系列的一部分。NanoPi R2S 是一款小型高性能的嵌入式系统&#xff0c;适用于网络路由、家庭网关、嵌入式应用和网络安全等场景。 r2s软件特点 特性描述…

前端学习——Vue (Day4)

组件的三大组成部分 组件的样式冲突 scoped <template><div class"base-one">BaseOne</div> </template><script> export default {} </script><style scoped> /* 1.style中的样式 默认是作用到全局的2.加上scoped可以让样…

MySQL - 安装、连接、简单介绍

1、安装 MySQL8.0 安装MySQL 8.0的步骤&#xff0c;以 Windows 为例&#xff1a; 1.1 下载MySQL Installer&#xff1a; 需要从MySQL官方网站下载MySQL Installer。在下载页面中&#xff0c;选择适用于Windows的MySQL Installer并下载。 1.2 运行MySQL Installer&#xff1…

银河麒麟安装nginx及配置(附常见问题解析)

下载并安装nginx 去官网下载所需安装包nginx: download 解压 tar -zxvf nginx-xxx.tar.gz 进入nginx目录下&#xff0c;输入命令 ./configure 此处可能报错 原因为未下载gcc编译器 输入以下命令解决 sudo apt-get install -y build-essential git-core bison openssl libr…

《价值流动》从项目到产品: 到底是什么应该流经软件价值流?| IDCF

译者&#xff1a;无敌哥 原文地址: https://www.tasktop.com/blog/what-flows-through-a-software-value-stream/ 本文翻译仅供学习交流之用。 原文作者 Mik Kersten 出版了《Project to Product》 本系列共四篇文章&#xff0c;分别是 01 从项目到产品&#xff1a;软件需要…

web服务器(Tomcat)

一、web服务器 1. 常见web服务器 Tomcat&#xff1a;由Apache组织提供的一种Web服务器&#xff0c;提供对jsp和Servlet的支持。它是一种轻量级的javaWeb容器&#xff08;服务器&#xff09;&#xff0c;也是当前应用最广的JavaWeb服务器&#xff08;免费&#xff09;。 Jbos…

看了2023年的一线互联网公司时薪排行榜!值得思考

前言 根据最近针对国内的一线互联网企业做的调研&#xff0c;汇总了他们的平均时薪水平&#xff0c;最终出了一个排行榜&#xff01; 首先我们来看下&#xff0c;排行榜分哪几个Level&#xff0c;分别为初级、中级、高级、资深、专家/架构这五个&#xff0c;主要根据工程师的…

【044】深入探索STL:解密set与multiset容器的神秘力量

解密set与multiset容器的神秘力量 引言一、set和 multiset容器概述二、set容器常用API三、multiset的常用API四、对组 pair4.1、概念4.2、创建对组 pair 的方式 五、使用示例5.1、重定义排序规则5.2、队组pair的使用 总结 引言 &#x1f4a1; 作者简介&#xff1a;一个热爱分享…

【GeoDa实用技巧100例】016:制作(三维)散点图

文章目录 一、散点图介绍二、加载实验数据三、散点图制作四、剔除回归样本五、3D散点图一、散点图介绍 散点图是一种以点的分布反映变量之间相关情况的统计图。根据散点图中各点的分布走向和密度,可以大致判断变量之间相互关系。根据反映变量的维度可分为二维(亦称2D)和三维(…

数据结构第六天(7.20)双向链表逆置

DoubleLink rev_double(DoubleLink L,int n) {if(LNULL||L->nextNULL)return L;DoubleLink pL;LL->next;p->nextNULL;DoubleLink t;printf("%d",n);for(int i0;i<n-1;i){tL;LL->next;t->nextp;p->prevt;t->prevNULL;pt;}return p; }

【kubernetes系列】flannel之vxlan模式原理

概述 在Kubernetes中要保证容器之间网络互通&#xff0c;网络至关重要。而Kubernetes本身并没有自己实现容器网络&#xff0c;而是而是借助CNI标准&#xff0c;通过插件化的方式自由接入进来。在容器网络接入进来需要满足如下基本原则&#xff1a; Pod无论运行在任何节点都可…

【Ubuntu18.04安装FileZilla】

Ubuntu18.04安装FileZilla 1 FileZilla简介2 安装方式3 使用方式3.1 连接FTP服务器3.1.1 快速连接3.1.2 通过站点管理器 1 FileZilla简介 FileZilla是自由开源、快速、可信赖的FTP客户端以及服务器端应用&#xff0c;具有多种特色、直观的接口。 特点&#xff1a;可控性、有条…

flutter android Webview 打开网页错误ERR_CLEARTEXT_NOT_PERMITTED 、 net:ERR_CACHE_MISS

当你在Flutter应用中尝试打开一个非安全连接的网页&#xff08;例如HTTP连接而不是HTTPS连接&#xff09;时&#xff0c;可能会遇到"ERR_CLEARTEXT_NOT_PERMITTED"错误。这是因为默认情况下&#xff0c;Android 9及更高版本禁止应用程序通过非安全的明文HTTP连接进行…

Lombok 使用教程

lombok 官网 Project Lombok 课程目标: 什么是lombok lombok的原理 lombok的常用注解 lombok的安装 引言 还记得刚刚接触java,学习面向对象时因为手写get,set,hashcode,equals等方法的痛苦吗? 还记得后来上手了Eclipse或Idea这样工具可以快速生成get,set等相关方法的兴奋吗? …

【如何训练一个中译英翻译器】LSTM机器翻译模型部署之ncnn(python)(五)

系列文章 【如何训练一个中译英翻译器】LSTM机器翻译seq2seq字符编码&#xff08;一&#xff09; 【如何训练一个中译英翻译器】LSTM机器翻译模型训练与保存&#xff08;二&#xff09; 【如何训练一个中译英翻译器】LSTM机器翻译模型部署&#xff08;三&#xff09; 【如何训…

数据结构和算法——桶排序和基数排序(图示、伪代码、多关键字排序,基数排序代码)

目录 桶排序 图示 伪代码 时间复杂度 基数排序 多关键字排序 代码&#xff08;C语言&#xff09; 次位优先 主位优先 桶排序 假设有N个学生&#xff0c;他们的成绩是0到100之间的整数&#xff08;于是有M101个不同的成绩值&#xff09;。如何在线性时间内将学生按成绩…

什么是在线帮助中心?

随着企业越来越注重客户体验和服务质量&#xff0c;建立一个完善的在线帮助中心已经成为企业不可或缺的一部分。在线帮助中心可以帮助客户解决各种问题&#xff0c;从而提升客户满意度和忠诚度。而Baklib作为一款优雅的云知识库构建平台&#xff0c;提供了一种简单高效的方式来…