首页 > 数据库 >Redis学习之缓存预热、缓存雪崩、缓存击穿、缓存穿透

Redis学习之缓存预热、缓存雪崩、缓存击穿、缓存穿透

时间:2024-10-09 20:19:57浏览次数:3  
标签:缓存 redis 数据库 Redis 访问 预热 线程 数据

一、缓存预热

        缓存预热就是系统启动前,提前将相关的缓存数据直接加载到缓存系统。避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题,用户直接查询事先被预热的缓存数据。 问题排查 1. 请求数量较高 2. 主从之间数据吞吐量较大,数据同步操作频度较高 , 因为刚刚启动时,缓存中没有任何数据 解决方案 准备工作: 1. 日常例行统计数据访问记录,统计访问频度较高的热点数据 2. 将统计结果中的数据分类,根据级别, redis 优先加载级别较高的热点数据 实施: 1. 使用脚本程序固定触发数据预热过程 2. 如果条件允许,使用了 CDN(内容分发网络),效果会更好
CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输得更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决Internet网络拥挤的状况,提高用户访问网站的响应速度   

二、缓存雪崩

       缓存雪崩是指在同一时段大量的缓存key 同时失效或者 Redis服务宕机,导致大量请求到达数据库,带来巨大压力。 解决方案:         1.给不同的Key 的 TTL 添加随机值         2.利用Redis 集群提高服务的可用性         3.给缓存业务添加降级限流策略         4.给业务添加多级缓存

图一

三、缓存击穿

       缓存击穿问题也叫热点Key 问题,就是一个被高并发访问并且缓存重建业务较复杂的 key 突然失效了,无 数的请求访问会在瞬间给数据库带来巨大的冲击。 常见的解决方案有两种: 1.互斥锁 2.逻辑过期 逻辑分析:假设线程 1在查询缓存之后,本来应该去查询数据库,然后把这个数据重新加载到缓存的,此时只要线程 1 走完这个逻辑,其他线程就都能从缓存中加载这些数据了,但是假设在线程 1没有走完的时候,后续的线程 2 ,线程 3 ,线程4同时过来访问当前这个方法, 那么这些线程都不能从缓存中查询到数据,那么他们就会同一时刻来访问查询缓存,都没查到,接着同一时间去访问数据库,同时的去执行数据库代码,对数据库访问压力过大。如图二所示。

图二

四、缓存穿透

       缓存穿透是指查询一个不存在的数据,由于缓存和数据库都没有命中,导致每次请求都需要从数据库中读取数据,增加了数据库的负担。

常见的解决方案有两种: 1.缓存空对象 优点:实现简单,维护方便 缺点: 额外的内存消耗,可能造成短期的不一致 2.布隆过滤 优点:内存占用较少,没有多余 key 缺点:实现复杂,存在误判可能 缓存空对象思路分析: 当我们客户端访问不存在的数据时,先请求 redis ,但是此时redis中没有数据,此时会访问到数据库,但是数据库中也没有数据,这个数据穿透了缓存,直击数据库,我们都知道数据库能够承载的并发不如 redis这么高,如果大量的请求同时过来访问这种不存在的数据,这些请求就都会访问到数据库,简单的解决方案就是哪怕这个数据在数据库中也不存在,我们也把这个数据存入到redis中去,这样,下次用户过来访问这个不存在的数据,那么在 redis中也能找到这个数据就不会进入到缓存了。 布隆过滤:布隆过滤器其实采用的是哈希思想来解决这个问题,通过一个庞大的二进制数组,走哈希思想去判断当前这个要查询的这个数据是否存在,如果布隆过滤器判断存在,则放行,这个请求会去访问redis ,哪怕此时 redis中的数据过期了,但是数据库中一定存在这个数据,在数据库中查询出来这个数据后,再将其放入到redis中,假设布隆过滤器判断这个数据不存在,则直接返回这种方式优点在于节约内存空间,存在误判,误判原因在于:布隆过滤器走的是哈希思想,只要哈希思想,就可能存在哈希冲突。

图三

                                          

标签:缓存,redis,数据库,Redis,访问,预热,线程,数据
From: https://blog.csdn.net/indiansummer_/article/details/142770629

相关文章

  • Spring Boot 3 配置 Redis 兼容单例和集群
    配置项SpringBoot3.x的redis配置和SpringBoot2.x是不一样的,路径多了一个dataspring:...data:redis:host:@redis.host@port:@redis.port@password:@redis.password@database:@redis.database@兼容单例和集群的配置开发......
  • 【Redis】Redis学习笔记
    概况redis==remoteDictionaryServer(远程字典服务)基于内存的KV键值对内存数据库作用:分布式缓存,与MySQL共同配合Redis--内存MySQL--磁盘Redis--NoSQLMySQL--SQL内存存储和持久化(RDB+AOF)Redis支持一部将内存中的数据写入硬盘宕机--可......
  • redis集成到spring boot中使用
    (一)添加依赖  redis服务器在官网中公开了自己使用的协议--RESP,所以我们可以使用这个协议来访问redis服务器,但是如果我们要自己实现库,那肯定是非常麻烦的,所以我们可以使用网上的库,我们直接调用接口,不需要关注redis协议的细节,我们这里使用的是jedis<dependency> <groupId......
  • 字节预热智能硬件 Ola Friend,预计为智能耳机;鸿蒙 NEXT 公测正式开启,微信邀请内测丨RTE
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。 我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代......
  • python——celery异常consumer: Cannot connect to redis://127.0.0.1:6379/1: MISCON
    1.检查Redis日志:查看Redis的日志文件(通常位于/var/log/redis/redis-server.log或者根据你的配置文件中指定的位置),以获取有关错误原因的详细信息。2.检查磁盘空间:确保你的服务器有足够的磁盘空间。使用以下命令检查磁盘使用情况:bashdf-h如果磁盘空间不足,清理一些不必......
  • chrome清除特定域名缓存
    在特定情况下,用户可能需要仅清除特定网站的缓存而不是全部浏览器缓存。这通常发生在以下几种场景:网站在更新后未正确加载新内容、开发人员在调试或部署过程中需要测试最新更改、缓存中的过时数据引起功能问题、或用户遇到特定站点的显示和性能异常时。通过清除特定域名的......
  • Win10 安装 Redis 数据库
    一、Redis数据库介绍Redis是一个开源的高性能键值对(key-value)的非关系型数据库。它通常用作数据结构服务器,支持多种类型的数据结构,如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sortedsets)等。Redis以其出色的性能、低延迟和高吞吐量而闻名,非常适合用作数......
  • Redis笔记
    NoSQLRedisRedis五大数据类型Redis-KeyStringListSetHashZSetRedis三种特殊数据类型GeospatialHyperLogLogBitMap事务JedisSpringboot整合Redisconf详解Redis持久化Redis发布订阅Redis主从复制Redis缓存穿透和雪崩NoSQLNotonlySQL,泛指非关系型......
  • 【Redis】持久化(下)-- AOF
    文章目录AOF概念如何使用AOFAOF工作流程命令写入演示文件同步策略`AOF`的重写机制概念触发重写机制`AOF`重写流程启动时数据恢复混合持久化总结AOF概念AOF持久化:以独立日志的方式记录每次的写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的.AOF的主要......
  • 京东面试:Redis主从切换,锁失效怎么办?
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......