Redis8:商户查询缓存2

欢迎来到“雪碧聊技术”CSDN博客!

在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将不断探索Java的深邃世界,分享最新的技术动态、实战经验以及项目心得。

让我们一同在Java的广阔天地中遨游,携手提升技术能力,共创美好未来!感谢您的关注与支持,期待在“雪碧聊技术”与您共同成长!

目录

一、缓存穿透

1、什么是缓存穿透?

缓存穿透的关键:不怀好意的人,会使大量的请求打到数据库,从而使数据库崩溃。

2、解决缓存穿透的两个方案

①缓存空字符串

②布隆过滤

3、解决商铺查询的缓存穿透问题

①思路:使用缓存空对象的方式。

②编写代码

③运行项目,查看效果

4、总结

①缓存穿透产生的原因是什么?

②缓存穿透的解决方案有哪些?


一、缓存穿透

1、什么是缓存穿透?

缓存穿透:是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。

举例:

假设我们的店铺id是1~20,结果有人非要查询id为100的店铺,这明显是不合理的,于是就会出现如下情况:

此时缓存中没有,去数据库查询也没有,于是这个不怀好意的人抓住了这个漏洞,搞了一堆线程来发送大量的请求,查询这个不存在的id,这些海量的请求都会打到数据库中,长时间一来,数据库就会垮掉(数据库速度不像redis那么快,可能打到数据库的请求一多,就会导致数据库垮掉)。

缓存穿透的关键:不怀好意的人,会使大量的请求打到数据库,从而使数据库崩溃。

2、解决缓存穿透的两个方案

解决关键:不让大量的不合理请求,打到数据库!

①缓存空字符串

解决思路:一个不怀好意的人,查询id=100的店铺时,redis、数据库中都没有,因此数据库就向redis中缓存一个key为100,值为“”空字符串的数据。这样即使这个人,查询id=100的店铺,发送多少次请求都没用,因为都被redis命中了""空字符串,然后就直接拒绝请求了,这是摸不到数据库的,因此就不会导致数据库崩溃。

因此就解决了缓存穿透。

  • 优点:实现简单,维护方便。
  • 缺点:产生额外的内存消耗、可能造成短期的不一致

                可以给存入redis中null的数据,设置有效期TTL,这样就不会导致爆满。

②布隆过滤

请求先经过“布隆过滤器”,先问问所查询的数据是否存在,如果“布隆过滤器”说不存在,那么将直接拒绝这个请求,根本不给你摸到数据库的机会。

  • 优点:内存占用较少,没有多余的key。
  • 缺点:实现复杂、存在误判可能

3、解决商铺查询的缓存穿透问题

①思路:使用缓存空对象的方式。

第一步:查询数据库时,如果不存在,不仅要报404异常,还要将查询的id作为key,“”空字符串作为value,存入redis中,这样该请求就不会一直摸到数据库。

第二步:判断redis命中时,要额外增加一个判断逻辑:如果命中的是“”空字符串,则直接结束请求;不是“”空字符串,才会返回给前端。

②编写代码

③运行项目,查看效果

第一次访问一个不存在的商铺id=0:

可见此时数据库中,查询该id不存在,于是以该id为key,“”空字符串为value,存入redis中,以便后期防止缓存穿透。

第二次访问该id=0的商铺,就是纯恶意访问,想让这个id=0的请求频繁打在数据库上:

此时发现该请求摸不到数据库,而是在redis命中“”空字符串,然后被拒绝了,挡住了,没有摸到数据库,这就解决了“缓存穿透”。

4、总结

①缓存穿透产生的原因是什么?

用户请求的数据在redis缓存、数据库中都不存在,于是恶意地、频繁地发起这样的请求,一直打到数据库中,给数据库带来巨大压力,导致数据库崩溃。

②缓存穿透的解决方案有哪些?

  • 方式一:缓存“”空字符串
  • 方式二:布隆过滤

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

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

相关文章

Windows下使用adb实现在模拟器中ping

文章目录 前言安装adb执行adb命令查找模拟器设备链接模拟器命令行执行ping命令 总结 前言 有时在模拟器中测试应用不像在Windows这种开发环境中那么方便,毕竟Windows或者Linux下的工具五花八门,可以满足各种测试需求,比如应用在模拟器中无法…

利用阿里云下载 WebRTC 源码

参考 https://zhuanlan.zhihu.com/p/357634816 ::https://www.python.org/ftp/python/3.13.0/python-3.13.0-amd64.exe ::https://github.com/git-for-windows/git/releases/download/v2.47.0.windows.2/PortableGit-2.47.0.2-64-bit.7z.exe ::https://703fa2-1956185617.ant…

Camera Tuning中AE/AWB/AF基础知识介绍

3A定义 3A是Camera ISP控制算法的一个重要组成部分,通常分为自动曝光(AE)、自动聚焦(AF)、自动白平衡(AWB)三个组件。 自动曝光(Auto Exposure) AE基本概念 曝光概念…

数据库中的用户管理和权限管理

​ 我们进行数据库操作的地方其实是数据库的客户端,是我们在客户端将操作发送给数据库的服务器(MySQL的服务器是mysqld),由数据库处理之后发送回来处理结果(其实就是一种网络服务)。所以可以存在多个客户端…

C# (定时器、线程)

C# (定时器、线程) TimerDispatcherTimerThread Timer using System; using System.Threading; using System.Threading.Tasks;private static Timer mTimer; // 定时器,10ms执行一次mTimer new Timer(recvTimerCalback, null, 0, 1); …

第11天:Material Design

欢迎来到第11天的Android编程教程!今天我们将深入学习Material Design,这是Google推出的一套设计规范,旨在帮助开发者创建美观且用户友好的应用界面。本节内容将包括Material Design的基本概念、设计原则、常用组件的使用以及主题和样式的自定…

ubuntu24.04安装matlab失败

又是摸鱼摆烂的一天,好难过~ 官方教程:https://ww2.mathworks.cn/help/install/ug/install-products-with-internet-connection.html 问题描述:https://ww2.mathworks.cn/matlabcentral/answers/2158925-cannot-install-matlab-r2…

Hive1.2.1与Hbase1.4.13集成---版本不兼容问题

hive与hbase集成失败,汗流夹背了吧老弟......哈哈哈哈,刷到这篇文章,那你可真是太幸运啦~ 常见错误一: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.hadoop.hbase.HTableDescriptor.addFamily(Lorg/apache/hadoop/h…

2024年11月12日Github流行趋势

项目名称:dockur / windows 项目维护者:kroese, renovate, hellodword, luisgmuniz, arisudesu 项目介绍:在Docker容器中运行Windows。 项目star数:25,154 项目fork数:1,826 项目名称:vercel / ai-chatbot…

CPLD概述

1. CPLD简介 CPLD是Complex Programmable Logic Device的简称,是一种较为复杂的PLD逻辑元件。对于可编程逻辑器件的名称,即使是相同名字,不同厂家还可能有自己不同含义。Xilinx公司把由自己发明的基于SRAM工艺和查找表结构,同时需…

项目1:井字棋 --- 《跟着小王学Python》

项目1:井字棋 — 《跟着小王学Python新手》 文章目录 项目1:井字棋 --- 《跟着小王学Python新手》目标功能设计1. 数据结构2. 功能模块3. 用户界面 实现步骤代码实现测试注意事项小结 目标 本技术文章旨在指导读者如何使用 Python 编程语言来实现一个简…

Python 的 Pygame 库,编写简单的 Flappy Bird 游戏

Pygame 是一个用 Python 编写的开源游戏开发框架,专门用于编写 2D 游戏。它提供了丰富的工具和功能,使得开发者能够快速实现游戏中的图形渲染、声音播放、输入处理和动画效果等功能。Pygame 非常适合初学者和想要快速创建游戏原型的开发者。 Pygame 的主…

LeetCode-222.完全二叉树的节点个数

. - 力扣(LeetCode) 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一…

两数组根据数组中每条数据对象中的某个值合并去重

假设有两个数组:arr1 和 arr2,并且每个数组中的元素是对象,你希望根据对象中的某个属性(比如 id),判断 arr2 中是否已经存在具有相同 id 值的对象。如果没有重复,就将 arr1 中的该对象新增到 ar…

16008.行为树(五)-自定义数据指针在黑板中的传递

文章目录 1.1 背景1.2 xml文件定义1.3 代码实现1.3 执行结果1.1 背景 自定义数据结构指针,通过黑板的形式,在树的节点中进行指针的传递。 1.2 xml文件定义 xhome@ubuntu:~/opt/groot_pro$ cat unit_t1.xml<?xml version="1.0" encoding="UTF-8"?&…

【MongoDB】MongoDB的核心-索引原理及索引优化、及查询聚合优化实战案例(超详细)

文章目录 一、数据库查询效率问题引出索引需求二、索引的基本原理及作用&#xff08;一&#xff09;索引的创建及数据组织&#xff08;二&#xff09;不同类型的索引&#xff08;三&#xff09;索引的额外属性 三、索引的优化与查询计划分析&#xff08;一&#xff09;通过prof…

企业如何实现无缝数据中心进行大数据迁移呢?

数据中心迁移是企业面临的一个复杂而关键的挑战&#xff0c;涉及到大量的数据移动和系统的重新部署。随着业务的扩展和技术的进步&#xff0c;企业可能需要将数据中心迁移到新的位置或升级到更先进的设备。在进行数据迁移时&#xff0c;必须精心规划和执行&#xff0c;以确保数…

FOFA使用教程之从零到精通

FOFA使用教程之从零到精通 前言一、关于网络资产测绘的概念1、啥是网络空间资产测绘2、啥是互联网资产二、FOFA的简要介绍1、FOFA地址是啥?2、关于FOFA的简要介绍三、FOFA精讲1、运算符规则详解① 关于 = 号的使用说明② 关于 == 号的使用说明③ 关于 && 号的使用说明…

初始JavaEE篇 —— 网络编程(2):了解套接字,从0到1实现回显服务器

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;JavaEE 目录 TCP 与 UDP Socket套接字 UDP TCP 网络基础知识 在一篇文章中&#xff0c;我们了解了基础的网络知识&#xff0c;网络的出…

【人工智能】10分钟解读-深入浅出大语言模型(LLM)——从ChatGPT到未来AI的演进

文章目录 一、前言二、GPT模型的发展历程2.1 自然语言处理的局限2.2 机器学习的崛起2.3 深度学习的兴起2.3.1 神经网络的训练2.3.2 神经网络面临的挑战 2.4 Transformer的革命性突破2.4.1 Transformer的核心组成2.4.2 Transformer的优势 2.5 GPT模型的诞生与发展2.5.1 GPT的核心…