redis缓存预热、缓存穿透的详细教程

2024-09-07 23:28

本文主要是介绍redis缓存预热、缓存穿透的详细教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

    作此篇主要在于关于redis的缓存预热、缓存雪崩、缓存击穿和缓存穿透在面试中经常遇到,工作中也是经常遇到。中级程序员基本上不可避免要克服的几个问题,希望一次性解释清楚

缓存预热

MySQL加入新增100条记录,一般默认以MySQL为准为底单数据,如何同步给redis(布隆过滤器)
这是100合法数据,mysql有100条新纪录,但是redis无。
    为什么需要预热
    1)比较懒,什么都不做,之对mysql做了数据新增,利用回写机制,让他逐渐实现100条新增的记录同步
最好提前晚上部署发布版本的时候,由自己人提前做一次,让redis同步了,不要把这个问题留给客户。
    2)通过中间件或者程序自行完成。

缓存穿透

    请求查询一条记录,先查看redis无,后查mysql无,都查不到该条记录,但是请求每次都会打到数据库上面去,导致后台压力暴增,这种现象成为雪崩。
    简单的说就是缓存和数据都差不多数据。而且也会存在反复穿透的恶意攻击给系统带来的伤害。严重是可以直接打爆数据库的。

解决方案1

空对象缓存或者省缺值
    如果发生了缓存穿透,我们可以针对要查找的数据,在redis里存一个和业务部门商量后确定的省缺值(比如0,负数、defaultNull等)
    举个例子:如比一个键值,uid:asddf,值defauNull为案例的key和value,先去redis查键uid:asddfxxx没有,再去查MySQL没有获取数据,这次一次穿透。但是在这我们增强回写机制,mysql也查不到的话也让redis存入查不到的key并保护mysql。
但是次方法架不住黑客恶意攻击,也有缺陷。只能解决key相同 的情况。具体表现为黑客会对你的系统进行攻击,拿一个不存在的id去查询数据,会产生大量的请求到数据库查询。可能会导致你的数据库由于压力过大而宕机。
其中攻击类型有如下两种:

1.相同的key攻击

    第一次打到MySQL,空对象缓存后对第二次就返回defaultNull缺省值,避免mysql被攻击,不用再用到数据库中去查询数据,浪费数据库资源。

2.不同的key攻击

    由于存在空对象缓存和缓存回写redis中的无关紧要的key也会越写越多,如果不设置过期时间的情况下,会极大的浪费内存空间。

解决方案2

    Google布隆过滤器Guava解决缓存击穿问题。
什么是布隆过滤器,如下如所示,它的数据结构有点像数据结构中的哈希,不过传统的哈希数据结构,一个对象只能占用数组的一个坑位。而布隆过滤器一个对象可以占用多个数组的坑位。具体如下图所示,一个字符串对象可以有多个哈希值,每一个哈希值都对应一个数组坑位。
在这里插入图片描述
    布隆过滤器用来做什么?很显然,解决缓存穿透问题(废话)。将所有合法的key将入到布隆过滤器中,设置一个白名单,在所有访问之前需要经过布隆过滤器,如果key值经过布隆过滤器校验不存在,则判定为非法key,避免了访问数据库。具体的工作流程如下流程图所示。
在这里插入图片描述
注意:所有的可以都往过滤器里放。

结语

    点赞、收藏。多谢多谢。

这篇关于redis缓存预热、缓存穿透的详细教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1146462

相关文章

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

Python设置Cookie永不超时的详细指南

《Python设置Cookie永不超时的详细指南》Cookie是一种存储在用户浏览器中的小型数据片段,用于记录用户的登录状态、偏好设置等信息,下面小编就来和大家详细讲讲Python如何设置Cookie... 目录一、Cookie的作用与重要性二、Cookie过期的原因三、实现Cookie永不超时的方法(一)

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

Redis的持久化之RDB和AOF机制详解

《Redis的持久化之RDB和AOF机制详解》:本文主要介绍Redis的持久化之RDB和AOF机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述RDB(Redis Database)核心原理触发方式手动触发自动触发AOF(Append-Only File)核