Redis缓存击穿、缓存雪崩、缓存穿透

缓存击穿(某个热点key缓存失效)

  • 概念
    • 缓存中没有但数据库中有的数据,假如是热点数据,那key在缓存过期的一刻,同时有大量的请求,这些请求都会击穿到DB,造成瞬时DB请求量大、压力增大
    • 和缓存雪崩的区别在于这里针对某一key缓存,后者则是很多key
  • 预防
    • 设置热点数据不过期
    • 定时任务定时更新缓存
    • 设置互斥锁
  • SpringCache解决方案
    • 缓存的同步sync
    • sync可以指示底层将缓存锁住,使只有一个线程可以进入计算,而其他线程堵塞,直到返回结果更新到缓存中
@Cacheable(value = "user:page", keyGenerator = "keyGenerator", cacheManager = "redisCacheManager1Hour", sync = true)
public Map<String, Object> page(Integer pageNum, Integer pageSize) {Map<String, Object> map = new HashMap<>();Page<User> page = new Page<>(pageNum, pageSize);Page<User> listPage = this.userMapper.selectPage(page, null);map.put("totalRecord", listPage.getTotal());map.put("totalPage", listPage.getPages());map.put("list", listPage.getRecords());return map;
}

缓存雪崩(多个热点key失效)

  • 概念
    • 大量的key设置了相同的过期时间,导致缓存在同一时刻全部失效,造成瞬时DB请求量大、压力骤增,引起雪崩
  • 预防
    • 存数据的过期时间设置随机,防止同一时间大量数据过期现象发生
    • 设置热点数据永远不过期,定时任务定时更新
  • SpringCache解决方案
    • 设置差别的过期时间,比如cacheManager配置多个过期时间维度
    • 配置文件time-to-live配置
spring:redis:host: 192.168.1.12port: 6379password: 123456cache:# 使用的缓存类型type: redisredis:# 过期时间单位毫秒time-to-live: 36000# 开启前缀,默认trueuse-key-prefix: true# 键的前缀key-prefix: gen# 是否缓存空结果,防止缓存穿透,默认truecache-null-values: true

缓存穿透(查询不存在数据)

  • 概念
    • 查询一个不存在的数据,由于缓存是不命中的,并且出于容错考虑,如发起id为“-1”不存在的数据
    • 如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。存在大量查询不存在的数据,可能DB就挂掉了,这也是黑客利用不存在的key频繁攻击应用的一种方式
  • 预防
    • 接口层增加校验,数据合理性校验
    • 缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,设置短点的过期时间,防止同个key被一直攻击
  • SpringCache解决方案
    • 空结果也缓存,默认不配置condition或者unless就行

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

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

相关文章

定性数据的介绍与讨论

关于数据的分类 数据可以根据不同的属性和特征进行分类。以下是数据常见的分类方式&#xff1a; 1. 数值型数据&#xff1a;表示为具体的数值&#xff0c;可以进行数学运算和统计分析。例如年龄、身高、体重等。 2. 分类型数据&#xff1a;表示为不同的类别或标签&#xff0…

c++语言基础18-开房门

题目描述 假设你手里有一串钥匙&#xff0c;这串钥匙上每把钥匙都有一个编号&#xff0c;对应着一个房门的编号。现给你一个房门编号&#xff0c;你需要判断是否能够打开该房门。 输入描述 测试数据共有多组。 第一行为一个整数 s&#xff0c;表示共有多少组测试数据。 每组第一…

Windows 10系统用Xlight FTP搭建SFTP服务器

步骤&#xff1a; 1.安装SFTP服务器 刚开始我使用的是freeSSHd&#xff0c;后面发现由于公司网络原因&#xff0c;打不开这个软件&#xff0c;改成了使用Xlight FTP&#xff0c; 官网下载链接&#xff1a;Xlight FTP 服务器 - 下载免费的windows FTP 服务器 Xlight FTP有30…

tp8/6 插件PhpOffice\PhpSpreadsheet导入表格

一、安装 composer require phpoffice/phpspreadsheet 官网&#xff1a;phpoffice/phpspreadsheet - Packagist 二、代码 <?php namespace app\services\upload\model; use app\services\BaseServices; use \PhpOffice\PhpSpreadsheet\Spreadsheet; use \PhpOffice\Php…

Keras内置数据集

目录 1、MNIST数字分类数据集 2、CIFAR10小图像分类数据集 3、CIFAR100小图像分类数据集 4、IMDB电影评论情感分类数据集 参数说明 imdb_word_index.json 示例 5、路透社新闻专线分类数据集 reuters_word_index.json 6、Fashion MNIST数据集 7、加州房价回归数据集 …

React16源码: createRef与forwardRef源码实现

ref 概述 拿一个场景举例开始 比如&#xff0c;在react当中写一个组件&#xff0c;类型是 class Component在 render function 里面渲染一系列的子组件或者 dom节点会有这样的需求&#xff0c;就是获取某个dom节点或某个子组件的实例来做一些手动的操作不局限于 props 更新这种…

JVM:字节码

JVM&#xff1a;字节码 前言1. JVM概述 前言 1. JVM概述 1. JVM vs JDK vs JRE JVM Java 虚拟机&#xff08;JVM&#xff09;是运行 Java 字节码的虚拟机。JVM 有针对不同系统的特定实现&#xff08;Windows&#xff0c;Linux&#xff0c;macOS&#xff09;&#xff0c;目的是…

实现文本 内容展开 / 收起

<template><el-table :data"tableData" style"width: 100%" height"250"><el-table-columnfixedprop"date"label"日期"width"150"></el-table-column><el-table-columnprop"name…

正向代理和反向代理的区别

我们作为用户是操作客户端的&#xff0c;所以对于客户端的代理就是正向的。牢记&#xff0c;我们是正向的&#xff0c;我们是正向的&#xff0c;我们是正向的。 正向代理和反向代理都是网络中常见的代理服务类型&#xff0c;它们在网络通信中的角色和功能有所不同。 正向代理&…

阿里云PolarDB数据库不同配置租用价格表

阿里云数据库PolarDB租用价格表&#xff0c;云数据库PolarDB MySQL版2核4GB&#xff08;通用&#xff09;、2个节点、60 GB存储空间55元5天&#xff0c;云数据库 PolarDB 分布式版标准版2核16G&#xff08;通用&#xff09;57.6元3天&#xff0c;阿里云百科aliyunbaike.com分享…

【数据湖架构】数据湖101:概述

数据湖是非结构化和结构化数据池&#xff0c;按原样存储&#xff0c;没有特定的目的&#xff0c;可以建立在多种技术上&#xff0c;如Hadoop&#xff0c;NoSQL&#xff0c;Amazon Simple Storage Service&#xff0c;关系数据库或各种组合根据一份名为“什么是数据湖”的白皮书…

微软截图工具SnippingTool_6.1.7601免费版

SnippingTool是一款win7系统自带的一款非常实用型截图工具&#xff0c;操作简单&#xff0c;点击“新建"可一键截图&#xff0c;截图之后会弹出编辑器&#xff0c;可以进行一些简单的勾画编辑操作&#xff0c;您可以使用笔、荧光笔、电子邮件或保存等选项。如果您的系统丢…

界面控件DevExpress Blazor Grid v23.2 - 支持全新的单元格编辑模式

DevExpress Blazor UI组件使用了C#为Blazor Server和Blazor WebAssembly创建高影响力的用户体验&#xff0c;这个UI自建库提供了一套全面的原生Blazor UI组件&#xff08;包括Pivot Grid、调度程序、图表、数据编辑器和报表等&#xff09;。 在这篇文章中&#xff0c;我们将介…

Android 13 - Media框架(30)- MediaCodec(五)

前一节我们了解了input buffer写入的流程&#xff0c;知道了起播写前几笔数据时会先获取graphic buffer&#xff0c;这一节我们就一起来了解下dequeueBufferFromNativeWindow是如何工作的。 1、dequeueBufferFromNativeWindow ACodec::BufferInfo *ACodec::dequeueBufferFromN…

基于Matlab的车道线检测技术研究与实现

一、摘要 车道线检测是自动驾驶和智能交通系统的重要组成部分&#xff0c;它对于车辆的导航和控制具有重要的作用。本文主要研究了基于Matlab的车道线检测技术&#xff0c;包括图像预处理、边缘检测、霍夫变换等步骤&#xff0c;并实现了一个车道线检测系统。实验结果表明&…

死锁的处理策略“预防死锁”-第三十七天

目录 前言 破坏互斥条件 破坏不剥夺条件 破坏请求和保持条件 静态分配法 破坏循环等待条件 顺序资源分配法 本节思维导图 前言 死锁的产生必须满足四个必要条件&#xff0c;只要其中一个或几个条件不满足&#xff0c;死锁就不会发生 破坏互斥条件 互斥条件&#xff1a;…

Swift并发的结构化编程

并发&#xff08;concurrency&#xff09; 早期的计算机 CPU 都是单核的&#xff0c;操作系统为了达到同时完成多个任务的效果&#xff0c;会将 CPU 的执行时间分片&#xff0c;多个任务在同一个 CPU 核上按时间先后交替执行。由于 CPU 执行速度足够地快&#xff0c;给人的错觉…

京东商品SKU API:跨境电商平台提升用户活跃度的关键

一.京东获得JD商品sku信息 API的介绍 京东获得JD商品sku信息 API是京东平台提供的一套接口&#xff0c;允许第三方开发者获取京东商品的各种信息&#xff0c;包括商品的SKU信息。通过这个API&#xff0c;跨境电商平台可以获取到关于商品的详细数据&#xff0c;如商品名称、规格…

【python入门】day17:模块化编程、math库常见函数

什么叫模块 模块的导入 导入所有&#xff1a;import 模块名称 导入指定&#xff1a;from 模块名称 import 函数/变量/类 python的math库 什么是math库 Python的math库是Python的内建库之一&#xff0c;它提供了许多数学函数&#xff0c;包括三角函数、对数函数、幂函数等&a…

Scikit-Learn线性回归(四)

Scikit-Learn线性回归四:梯度下降 1、梯度下降1.1、梯度下降概述1.2、梯度下降及原理1.3、梯度下降的实现2、梯度下降法求解线性回归的最优解2.1、梯度下降法求解的原理2.2、梯度下降法求解线性回归的最优解2.3、梯度下降法求解线性回归案例(波士顿房价预测)3、Scikit-Learn…