Redis缓存穿透

缓存穿透:

查询一个不存在的数据,mysql查询不到数据也不会直接写入缓存,就会导致每次请求都查数据库。

方法一:

方法二:

布隆过滤器:

简单来说就是一个二进制数组,用0和1来判断数组中是否存在这个元素,整体流程如下:

  1. 将传入的数通过n个哈希函数(不一定是三个)计算出n个哈希值。

  2. 然后在数组中将这n个下标(下标与哈希值相等)中的数由0转换为1。(增)

  3. 判断数是否存在的方法就是看数组中这n个下标中的数是否为1。(查)

缺点:

  1. 删除不便:如下图,假如数组下标为2的位置被用来储存 你好 和 hello 这两个信息,如果想对 你好 进行删除,那我也必然会将 hello 也删除掉

  1. 误判:如下图,id为1的数据将下标为1、3、7的数组数据改为了1,id为2的数据将下标为9、12、14的数组数据改为了1,这时候我们查询id为3的数据,通过三个哈希函数计算出的三个哈希值为3、9、12,数组中明明没有存过这个数据,但是这几个哈希值对应的下标在数组中数据为1,过滤器机会误判数组中存在这个数据。

我们可以通过谷歌的Guava工具类来减少误判

import com.google.common.hash.BloomFilter;
import com.google.common.hash.Funnels;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.nio.charset.Charset;
 
@Configuration
public class BloomFilterConfig {
    /**
     * expectedInsertions:期望添加的数据个数
     * fpp:期望的误判率,期望的误判率越低,布隆过滤器计算时间越长
     *      原因就是fpp越小,占用的空间越大,同时使用的哈希函数越多,出现重复的可能性越小    
     * @return
     */
    @Bean
    public BloomFilter<String> goodsIDBloom(){
        BloomFilter<String> filter = BloomFilter.create(Funnels.stringFunnel(Charset.forName("utf-8")), 1000,0.00001);
        return filter;
    }
 
    @Bean
    public BloomFilter<String> orderBloom(){
        BloomFilter<String> filter = BloomFilter.create(Funnels.stringFunnel(Charset.forName("utf-8")), 1000,0.00001);
        return filter;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《技术人求职之道》之洞悉人事篇:揭秘简历筛选,千挑万选,简历如何脱颖而出

摘要 在上一节中&#xff0c;我们探讨了面试前的技术准备&#xff0c;而这一节&#xff0c;将深入探讨求职者在面对HR筛选简历时的策略与注意事项。本文将首先介绍HR的职责和绩效考核机制&#xff0c;揭示部分HR可能存在的"只招不聘"现象&#xff0c;并建议求职者应…

thinkphp5使用模型删除与复杂查询EXP

模型删除 应用软删除 表中需要有字段&#xff0c;deletetime 模型中使用下面方法 use SoftDelete;protected $deleteTime delete_time;真实删除 // 软删除 User::destroy(1); // 真实删除 User::destroy(1,true); $user User::get(1); // 软删除 $user->delete(); // 真…

Claude3.5:编码螃蟹游戏就是这么轻松

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则…

容器之滚动条窗体演示

代码; #include <gtk-2.0/gtk/gtk.h> #include <glib-2.0/glib.h> #include <gtk-2.0/gdk/gdkkeysyms.h> #include <stdio.h>int main(int argc, char *argv[]) {gtk_init(&argc, &argv);GtkWidget *window;window gtk_window_new(GTK_WINDO…

御龙掘宝挂机零撸修仙类游戏定制开发源码部署

随着移动游戏的普及&#xff0c;御龙掘宝挂机零撸修仙类游戏定制开发源码部署应运而生。这款游戏结合了传统的修仙元素、挂机游戏的核心玩法以及零撸掘金的商业模式&#xff0c;为玩家提供了一个全新的游戏体验。本文将探讨御龙掘宝挂机零撸修仙类游戏定制开发源码部署的核心技…

Vuex模块化

创建命名空间mian.jssrc/store/index.jssrc/store/getters.jssrc/store/modules 各自管理仓库src/store/modules/testVuexModules.js 命名空间模块 组件内提交与获取Vuex的值&#xff1a;1.异步操作 this.$store.dispatch2.同步操作 this.$store.commit 创建命名空间 mian.js …

springboot特殊问题处理2——springboot集成flowable实现工作流程的完整教程(一)

在实际项目开发过程中&#xff0c;流程相关的业务实现采用工作流会异常清晰明了&#xff0c;但是Activity学习成本和开发难度对追求效率的开发工作者来说异常繁琐&#xff0c;但是作为Activity的亲儿子之一的flowable&#xff0c;其轻量化的使用和对应的api会让开发者感受简单&…

毕业答辩制作PPT【攻略】

毕业答辩制作PPT【攻略】 前言版权毕业答辩制作PPT【攻略】一、WPS AI 15天免费会员二、AI文档生成PPT三、修改完善PPT 最后 前言 2024-06-14 23:43:05 以下内容源自《【攻略】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN…

快捷方式(lnk)--加载HTA-CS上线

免责声明:本文仅做技术交流与学习... 目录 CS: HTA文档 文件托管 借助mshta.exe突破 本地生成lnk快捷方式: 非系统图标路径不同问题: 关于lnk的上线问题: CS: HTA文档 配置监听器 有效载荷---->HTA文档--->选择监听器--->选择powershell模式----> 默认生成一…

记某大学的一次EduSRC的挖掘

0x1 前言 漏洞由来简述 首先讲下这个漏洞的由来吧&#xff0c;这类漏洞叫做OSS储存桶漏洞&#xff0c;是阿里云OSS存储云安全的漏洞&#xff0c;也是一个相对来讲比较新鲜的安全漏洞。我是在进行对某大学的小程序进行文件上传测试的时候发现返回包的URL里面有“OSS”字段&…

Wilcom PE 威尔克姆绣花软件下载安装;Wilcom PE 广大绣花制版师必备软件!

Wilcom PE这款软件不仅具备强大的设计功能&#xff0c;更在用户体验上下足了功夫&#xff0c;使得刺绣图案的创作变得更为简单、高效。 在Wilcom PE的丰富工具箱中&#xff0c;用户可以发现各种精心设计的工具&#xff0c;它们如同刺绣师手中的魔法棒&#xff0c;将创意变为现…

深度解析RocketMq源码-持久化组件(一) MappedFile

1. 绪论 rocketmq之所以能够有如此大的吞吐量&#xff0c;离不开两个组件&#xff0c;一个是利用netty实现的高性能网络通信组件&#xff1b;另一个就是利用mmap技术实现的存储组件。而在rocketmq的存储组件中主要有三个组件&#xff0c;分别是持久化文件commitLog&#xff0c…

【尚庭公寓SpringBoot + Vue 项目实战】移动端浏览历史(二十二)

【尚庭公寓SpringBoot Vue 项目实战】移动端浏览历史&#xff08;二十二&#xff09; 文章目录 【尚庭公寓SpringBoot Vue 项目实战】移动端浏览历史&#xff08;二十二&#xff09;1、业务介绍2.接口开发2.1.分页查询浏览历史列表2.2.保存浏览历史 1、业务介绍 浏览历史指的…

基于STM32和人工智能的智能小车系统

目录 引言环境准备智能小车系统基础代码实现&#xff1a;实现智能小车系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统4.4 用户界面与数据可视化应用场景&#xff1a;智能小车管理与优化问题解决方案与优化收尾与总结 1. 引言 随着机器人技术的发展&#xff0c;智能小…

【Golang】Steam 创意工坊 Mod 文件夹批量重命名

本文将介绍一个使用Go语言编写的脚本&#xff0c;其主要功能是解析XML文件并基于解析结果重命名文件夹。这个脚本适用于需要对文件夹进行批量重命名&#xff0c;并且重命名规则依赖于XML文件内容的情况。 脚本功能概述 Steam创意工坊下载的Mod文件夹批量重命名为id名称 运行前…

【docker入门】

在软件开发过程中&#xff0c;环境配置是一个至关重要的步骤&#xff0c;它不仅影响开发效率&#xff0c;也直接关联到软件的最终质量。正确的环境配置可以极大地减少开发中的潜在问题&#xff0c;提升软件发布的流畅度和稳定性。以下是几个关键方面&#xff0c;以及如何优化环…

网上预约就医取号系统

摘 要 近年来&#xff0c;随着信息技术的发展和普及&#xff0c;我国医疗信息产业快速发展&#xff0c;各大医院陆续推出自己的信息系统来实现医疗服务的现代化转型。不可否认&#xff0c;对一些大型三级医院来说&#xff0c;其信息服务质量还是广泛被大众所认可的。这就更需要…

如何制定新版FMEA培训后的知识应用考核机制?

随着新版FMEA的推出&#xff0c;如何确保培训后的知识能够得到有效应用&#xff0c;并转化为实际工作中的能力&#xff0c;成为了企业关注的焦点。本文&#xff0c;深圳天行健企业管理咨询公司将分享如何制定一套科学、实用的新版FMEA培训后知识应用考核机制&#xff0c;以助力…

四、SpringMVC实战:构建高效表述层框架(二)

二、SpringMVC接收数据 2.1 访问路径设置 RequestMapping注解的作用就是将请求的 URL 地址和处理请求的方式&#xff08;handler方法&#xff09;关联起来&#xff0c;建立映射关系。 SpringMVC 接收到指定的请求&#xff0c;就会来找到在映射关系中对应的方法来处理这个请求…

第六十六天打卡 | 卡码网101 孤岛的总面积、卡码网102 沉没孤岛、卡码网103 水流问题、卡码网104 建造最大岛屿

卡码网101 孤岛的总面积 这一题在昨天的基础上&#xff0c;将比较得出最大孤岛面积的逻辑改为统计所有孤岛面积之和的逻辑即可。 最近做项目的时候也发现&#xff0c;很多时候代码逻辑能够复用最好就不要再自己写&#xff0c;防止出错&#xff0c;当然刷代码题的时候不…