首页 > 其他分享 >十二、缓存穿透、缓存击穿、缓存雪崩

十二、缓存穿透、缓存击穿、缓存雪崩

时间:2023-06-08 15:33:48浏览次数:34  
标签:缓存 过期 数据库 击穿 雪崩 数据

缓存穿透

缓存穿透是指查询一个缓存和数据库中都不存在的数据,客户端不断发起请求,导致数据库压力过大

解决方法

1、采用布隆过滤器,将所有可能存在的数据,哈希到一个很大的 bitmap 中, 一个一定不存在的数据会被 bitmap 拦截调,从而避免了对数据库的查询压力。

2、如果查询的数据为空,直接将空数据也缓存起来并设置较短的过期时间,这样下次访问的时候,就直接返回空值。

缓存击穿

缓存击穿是指一个key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接打到数据库

解决方法

热点数据永不过期

缓存雪崩

缓存雪崩是指缓存中大量的不同数据在同一时间段过期失效,此时大量的数据查询也会直接打到数据库,导致数据库压力过大

解决方法

过期时间随机分配

标签:缓存,过期,数据库,击穿,雪崩,数据
From: https://www.cnblogs.com/yogayao/p/17466634.html

相关文章

  • redis应用场景--缓存过期时间
    缓存可以有效的提高关键数据的获取速度,使得不必要每次查询数据库,避免了数据库被击穿。主动更新:需要知道这份数据的实效时间点,然后在那个时间点到来时重新更新数据,可能是查询数据库,也可能是访问第三接口,在获得数据之后,更新redis缓存。被动更新:程序每次都去redis获取数......
  • 【前端方案】-表格排序列LRU缓存方案(二)
    一.目标个人账号的设置记忆功能-避免用户每次登录之后重新对表单字段做展示设置二、存储方案轻量方案结合localstorage低容量存储(5M),根据LRU只存最近访问的20至30张表格列配置数据全量方案大内存G级别,使用indexedDb进行存储,有多少表格操作列数据就存多少,结合第三方库dexie.......
  • 自定义缓存注解
    自定义Springboot缓存注解在使用redis缓存时,我们可能使用Jedis,RedisTemplate或者使用@Cacheable注解。尽管这些方法都能够实现缓存的功能,但是有时在真实的业务当中这些方法可能还不够简洁和灵活,于是我们可以自定义缓存注解来解决问题。SpringBoot中注解的格式......
  • 10. Mybatis的缓存
    1.Mybatis的一级缓存‍一级缓存是SqlSession级别的,通过同一个SqlSession查询的数据会被缓存,下次查询相同的数据,就会从缓存中直接获取,不会从数据库重新访问,一级缓存时默认开启的‍使一级缓存失效的四种情况:1)不同的SqlSession对应不同的一级缓存2)同一个Sql......
  • 分布式缓存
    常见缓存中间件:MemcachedmongoDBRedisMemcached:简单key-value数据结构,不支持持久化(可重启缓存功能并不算),不支持集群(客户端自己控制),性能强。mongoDB:数据结构非常全面的文档型数据库,支持持久化,支持集群,性能中等。Redis:技能五种基本数据类型和扩展类型,支持持久化,支持集群,性能强......
  • Mybatis 一级缓存与二级缓存
    本文转载于:Mybatis一级缓存与二级缓存的区别你知道吗Mybatis缓存缓存就是内存中的数据,常常来自对数据库查询结果的保存,使用缓存可以避免频繁与数据库进行交互,从而提高查询响应速度。MyBatis提供了对缓存的支持,分为一级缓存和二级缓存,如下图所示:我们先大致了解下MyBatis一......
  • 手把手教你AspNetCore WebApi:缓存(MemoryCache和Redis)
    前言这几天小明又有烦恼了,系统上线一段时间后,系统性能出现了问题,马老板很生气,叫小明一定要解决这个问题。性能问题一般用什么来解决呢?小明第一时间想到了缓存。什么是缓存缓存是实际工作中非常常用的一种提高性能的方法。缓存可以减少生成内容所需的工作,从而显著提高应用程序的性能......
  • Hash 缓存
    原文点此跳转输出文件名(Hash)静态资源缓存是前端性能优化的一个点,所以在前端开发过程中,一般会最大限度的利用缓存(这里主要是强缓存)。如果设置了强缓存后,每次当我们部署了新的项目文件到线上的时候,因为文件名称没有变化,浏览器就会读取本地缓存中的bundle.js文件,导致了我们新的bund......
  • 应用问题解决——缓存穿透、缓存击穿、缓存雪崩
    一、缓存穿透缓存穿透:key对应的数据在数据源并不存在,每次针对key的请求从缓存中获取不到,请求都会压到数据源,从而可能压垮数据源,比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库现象:1、应用服务器压力变大2、redis命中率......
  • Redis(四) -- 缓存
    缓存缓存更新方式这是决定在使用缓存时就该考虑的问题。设置缓存数据的TTL,当缓存数据失效后,如果有系统要请求,则会查询数据库并插入缓存(被动更新)不友好在各类会往mysql写入数据的系统中,植入更新缓存的逻辑(判断哪些表的数据是热点数据,那么就可以在这些表数据的更新操作逻辑中......