Redis的缓存穿透、缓存雪崩、缓存击穿怎么解决

Redis在实际使用中是会遇到很多问题的,例如今天说到的缓存穿透、缓存雪崩、缓存击穿。

缓存穿透:

缓存穿透是指客户端请求的数据在redis缓存和数据中都不存在,这样缓存永远都不会生效,这些请求都会打到数据库当中,对数据库造成压力,这种情况可能是恶意攻击的情况。

常见的解决方案有两种:

一种是缓存空对象,不管这个结果在数据库当中是否查询到,都将其缓存到redis当中并设置过期时间,造成结果就是可能造成内存的消耗和短期的不一致

还有一种就是布隆过滤器,布隆过滤器可以简单理解成是一个二进制的存储结构,当做一个白名单来使用,请求首先来到布隆过滤器,如果存在则放行,不存在则拒绝。

缓存雪崩:

缓存雪崩是指缓存数据在同一时间内大量失效,造成大量请求全部打到数据库上。

常见的结局方案是将过期时间设置的更加分散,可以在设置过期时间时加一个随机的事件,让数据不要过期的那么同时

缓存击穿:

缓存击穿指的是热点数据过期之后大量的请求发送到了数据库,造成了压力

解决办法可以通过互斥锁和逻辑过期。

互斥锁的实现逻辑是:再一次查询缓存未命中的情况下,获取到互斥锁,然后进行查询数据库操作,重建缓存,并写入缓存当中之后释放锁,这样后续请求就可以到缓存当中获取到,互斥锁可以通过setnx实现

详细看这里:spring项目中如何通过redis的setnx实现互斥锁解决缓存缓存击穿问题-CSDN博客

逻辑过期是通过业务实现热点数据的不过期,可以通关在值里添加expire字段,实现过期判断,如果发现这个逻辑时间已经过期,则获取互斥锁,开启一个新线程去查询数据库重写缓存,自己返回旧数据,此时如果别的线程访问缓存数据,发现过期尝试去获取锁,失败后直接返回过期数据。

 

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

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

相关文章

MySQL_数据类型简介

课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :&#x1…

Setting Design Properties

设置设计属性 接下来,在设计上设置配置模式。这是导致物理 约束,在这种情况下是设计的属性,而不是单元的属性。首先,列出所有 当前设计的特性。 1.在Tcl控制台中列出设计的属性: list_property [current_design] 此命…

ITOP-2 分模块安装部署itop

ITOP-2 分模块安装部署itop 一、安装PHP组件1、查看当前Linux服务器安装的PHP版本2、安装源epel,安装源remi,安装yum-config-manager3、用yum-config-manager指定remi的php7.2仓库4、安装升级php5、验证当前PHP的版本 二、部署 MySQL 服务1、设置 Repo2、…

基于TRIZ的救援机器人轻量化设计

在救援机器人设计中,轻量化是一个至关重要的目标,它直接关系到机器人的便携性、运输效率以及在复杂环境中的作业能力。TRIZ理论为我们提供了一套系统化的工具和方法,用于解决设计过程中遇到的各种挑战,特别是在实现轻量化目标时&a…

论文阅读-Demystifying Misconceptions in Social Bots Research

论文链接: https://arxiv.org/pdf/2303.17251 目录 摘要: Introduction Methodological issues Information leakage Cherry-picking(采摘樱桃) Straw-man methodology (稻草人) Data biases Conceptual issu…

基于ssm+vue+uniapp的智能停车场管理系统小程序

开发语言:Java框架:ssmuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:M…

vue2基础系列教程之todo的实现及面试高频问题

关键知识点 v2里面,当在同一个元素或组件上同时使用v-for和v-if,v-for的权限高于v-if v-show和v-if的区别主要有 v-if是惰性的,v-show是及时的v-if值为false时,不会生成dom,v-show不管值是true或false,都会生成dom,修改的是dom的display属性…

传知代码-KAN卷积:医学图像分割新前沿

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 概述 在本文中深入探讨KAN卷积在医学图像分割领域的创新应用,特别是通过引入Tokenized KAN Block(Tok Kan)这一突破性设计,将深度学习中的图像分割技术推向了新的高…

轮转数组 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数

示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7,1,2,3,4]示例 2: 输入:nums [-1,-100,3,99], k 2 输出:[3,99,-1,-100] 解释: 向右…

Halo 开发者指南——项目运行、构建

准备工作 环境要求 OpenJDK 17 LTSNode.js 20 LTSpnpm 9IntelliJ IDEAGitDocker(可选) 名词解释 工作目录 指 Halo 所依赖的工作目录,在 Halo 运行的时候会在系统当前用户目录下产生一个 halo-next 的文件夹,绝对路径为 ~/ha…

通过LiveGBS实现安防监控摄像头GB28181转成WebRTC流实现web浏览器网页无插件低延迟直播...

目录 1、WebRTC超低延时直播2、WebRTC延时对比3、LiveGBS的低延时的WebRTC流4、分屏页面如何选择默认播放流5、无法播放Webrtc6、搭建GB28181视频直播平台 1、WebRTC超低延时直播 需要低延时的视频流监控播放,之前可以用rtmp的低延时播放(1秒左右),随着浏…

腾讯百度阿里华为常见算法面试题TOP100(4):双指针、哈希、滑动窗口

之前总结过字节跳动TOP50算法面试题: 字节跳动常见算法面试题top50整理_沉迷单车的追风少年-CSDN博客_字节算法面试题 目录 双指针 42.接雨水 283.移动零 11.盛最多水的容器 15.三数之和 哈希 1. 两数之和 49.字母异位词分组 128.最长连续序列 滑动窗…

GUI编程13:JDialog弹窗

视频链接:15、JDialog弹窗_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1DJ411B75F?p15&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 package com.yundait.lesson04;import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; im…

计算机网络27、28——Linux命令1、2

1、虚拟机网络前方路径内容 用户名机器名:/$ $表示普通用户,#表示root用户 2、Linux不分盘,都是绝对路径 /表示根目录,表示计算机文件夹下 ~是当前用户的家,表示home文件夹下自己的文件夹 3、bin文件夹下的是可执…

书生大模型全链路开源体系,学习

优点 书生浦语开源大模型,是一个开源的大模型,大家可以一起学习 还有配套的教学视频,很快就能上手,而且还奖励算力,可以直接训练,讨论学习,非常nice。 教学视频 书生浦语大模型全链路开源开…

Qt实现登录界面

本文基于Qt实现一个简单的登录界面,主要使用到Widget、button、edit等控件,基于自定义的信号槽实现界面的跳转,使用绘图设备添加背景图等。 1. 创建主界面 设计主界面的样式,并添加相关的控件。如下显示: 代码如下&…

Android Tools | 如何使用Draw.io助力Android开发:从UI设计到流程优化

Android Tools | 如何使用Draw.io助力Android开发:从UI设计到流程优化 1. 引言 在Android开发中,视觉化设计与流程管理至关重要。虽然开发工具如Android Studio强大,但它并不适用于所有设计场景。Draw.io是一款免费的在线绘图工具&#xff…

【C++笔记】类和对象的深入理解(三)

【C笔记】类和对象的深入理解(三) 🔥个人主页:大白的编程日记 🔥专栏:C笔记 文章目录 【C笔记】类和对象的深入理解(三)前言一.日期类的实现1.1声明和定义分离1.2日期类整数1.3日期类整数1.4日期类-整数1.5日期类-日期1.6复用对…

5. Python之数据类型

Python数据类型有数值型,字符串型,布尔型等等 内置函数type(),可以查看变量的数据类型 。 一、数值类型 整数(没有小数部分,包含正整数,负整数,0,默认为十进制数)&…

RuoYi-Vue3使用minio图片预览不了的问题

参照官网配置好之后,图片预览不了 1、参照官网修改前端src\components\ImageUpload\index.vue 2、如果图片预览不了,发现是Minio后台返回的url地址内部包括逗号 与代码里split(",")冲突了, 解决方法是改成分号 多个图片可以预览了…