Redis学习之缓存穿透、缓存击穿和缓存雪崩详解

目录

      • 缓存穿透
      • 解决方案
        • 缓存空对象
        • 布隆过滤器
      • 缓存击穿
      • 解决方案
        • 对访问数据库的操作加锁
        • 提前缓存热点数据,设置热点数据永不过期
      • 缓存雪崩
      • 解决方案
        • Redis高可用
        • 限流降级
        • 数据预热
        • 设置合理的过期时间
      • 参考

缓存穿透

指的是对某个一定不存在的数据进行请求,该请求将会穿透缓存到达数据库。
如:用户查询一个 id = -1 的商品信息,一般数据库 id 值都是从 1 开始自增,很明显这条信息是不在数据库中,当没有信息返回时,会一直向数据库查询,给当前数据库的造成很大的访问压力。

解决方案

缓存击穿

缓存击穿是指有某个经常被查询的key在缓存过期后或一个未被缓存的key,突然接受到大量有关这个key的访问请求,这样会导致大并发请求直接穿透缓存,请求数据库,瞬间对数据库的访问压力增大。

缓存击穿的原因:

  • 一个“冷门”(未缓存)的key,突然被大量用户请求访问。
  • 一个“热门”key,在缓存中时间恰好过期,这时有大量用户来进行访问。
    在这里插入图片描述

解决方案

  • 对访问数据库的操作加锁

    当key要查询数据库的时候加上一把锁,这时只能让第一个请求进行查询数据库,然后把从数据库中查询到的值存储到缓存中,对于剩下的相同的key,可以直接从缓存中获取即可。

    • 单机环境下:使用Lock、Synchronized 加锁
    • 分布式环境下使用分布式锁,如:基于数据库、基于Redis或者zookeeper 的分布式锁。
  • 提前缓存热点数据,设置热点数据永不过期

缓存雪崩

缓存雪崩是指在某一个时间段内,缓存集中过期失效,如果这个时间段内有大量请求,而查询数据量巨大,所有的请求都会达到存储层,存储层的调用量会暴增,引起数据库压力过大甚至宕机。

缓存雪崩的原因:

  • Redis宕机
  • 大量热点数据同时过期

解决方案

参考

Redis的缓存了解吗?
Cyc2018

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

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

相关文章

Redis高可用:主从复制及哨兵模式

目录主从复制作用复制原理使用的方式哨兵模式主从切换过程Redis Sentinel的配置文件参考主从复制 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单…

java客户端作为kafka消费者测试

【README】 本文主要对 java客户端作为kafka 消费者进行测试, 生产者由 kafka客户端扮演; 【1】普通消费者 设置消费者组; 重置消费者的offset, 即每次都从最头开始消费(默认仅保持7天内数据) &#xf…

spring bean初始化及销毁你必须要掌握的回调方法。

转载自 spring bean初始化及销毁你必须要掌握的回调方法。 spring bean在初始化和销毁的时候我们可以触发一些自定义的回调操作。 初始化的时候实现的方法 1、通过java提供的PostConstruct注解; 2、通过实现spring提供的InitializingBean接口,并重写其a…

java生产者实现kafka拦截器

【RAEDME】 本文中, java客户端作为生产者, centos中consumer线程作为消费者; 【1】拦截器简述 1)拦截器是什么? 很明显,为了实现面向切面编码,即在 具体逻辑的上下文 添加一些逻辑&#xff1…

Redis两种客户端:lettuce和Jedis的区别

spring boot 2的spring-boot-starter-data-redis中,默认使用的是lettuce作为redis客户端,它与jedis的主要区别如下: Jedis是同步的,不支持异步,Jedis客户端实例不是线程安全的,需要每个线程一个Jedis实例&…

mysql语句性能开销检测profiling详解

转载自 mysql语句性能开销检测profiling详解 之前我介绍过msyql查询优化explain检查命令的使用,explain主要是检查sql语句的基本性能,sql是否优秀,但不能查看具体的涉及硬件资源的开销,今天要介绍的这个profiling工具可以更细节的…

数据库主从和主备部署介绍

转自: https://www.cnblogs.com/fengzheng/p/13401783.html 数据库层的几种模式 在系统架构中,数据库层主要由如下几种模式,分别是单点模式、主备模式、主从模式。 单点模式 单点模式是最简单的模式,只有一台数据库服务器&…

lv官网编码查询_图文讲解,如何免费自主查询商标近似情况

每一个商业主体,都会给自己的企业、产品、服务注册一个好听的商标,但一个商标名并不是我们喜欢就可以,还要能够得到核准注册。为此,如何能判断出一个商标名是否能够被注册呢?这便需要利用商标的近似判断了(查询该商标名…

hashCode到底有什么用?

转载自 hashCode到底有什么用? hashCode概念 hashCode是jdk根据对象的地址算出来的一个int数字,即对象的哈希码值,代表了该对象在内存中的存储位置。 我们都知道hashCode()方法是顶级类Object类的提供的一个方法,所有的类都可以进…

MySQL、MongoDB、列数据库的区别及应用场景

目录什么是行存储和列存储?什么是MongoDB(NoSQL)?OLTP和OLAP什么是CAP定理?使用场景行存储的适用场景:列存储的适用场景:MongoDB相对于MySQL的优点更适用MySQL的场景更适用MongoDB的场景个人理解扩展参考什…

转-Redis AOF 持久化详解

转自: https://juejin.cn/post/6844903902991630349 Redis AOF 持久化详解 Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据保存在磁盘上的数据库要快很多。但是一旦进程退出,Redis 的数据就会丢失。 为了…

设计模式之动态代理模式实战

转载自 设计模式之动态代理模式实战 昨天分享了静态代理的概念及存在的缺点,所以今天讲的动态代理模式十分重要。动态代理在我们工作当中应用相当广泛,如Srping AOP就是动态代理的在开源框架的比较出名的应用。 动态代理有两种试,一是通过JD…

南理工计算机博士 年薪_计算机专业的女博士毕业后,进入211大学当讲师,年薪曝光...

现如今,对于很多年轻人来说,高学历就意味着高收入,大家在进入职场以后,通过高学历找到高薪的工作,能够在职场中少走很多弯路,他们在大公司能够跟很多的同事在一起勤快的合作,能够决定他们在以后…

MySQL优化(一):表结构优化

目录表优化数据类型的选择避免列的值为NULLVARCHAR和CHAR日期和时间类型选择标识符(主键)的类型错误的表结构一张表中有太多列太多的关联适当建立冗余数据混用范式和反范式建立缓存表和汇总表参考表优化 此文章用于记录《高性能MySQL》一书的知识点。 …

centos上安装redis

【README】 本文旨在阐述在linux上安装 redis 的步骤; 【1】具体步骤 step1) 把 redis 压缩包 上传到 /opt/software, 并解压 step2)打开 redis目录,执行 make, 若没有gcc编译器, 执行命令安装gcc&#…

设计模式之静态代理模式实战

转载自 设计模式之静态代理模式实战静态代理模式很简单,代理类和实现类都实现相同的接口,然后通过代理类来调用实现类的方法。如我们想保存用户信息之前打印用户信息,或者保存用户信息之后把这些信息缓存下来,即在运行方法前后插入…

pandas追加写入excel_[Excel]如果你爱Excel,请学好pandas

现在坐办公室的各种大小团体里,都会有一个“懂Excel的人”,可能那个人是团体里的一员,也可能是和这个团队关系比较好的一个热心人,但总之,你的身边会有这么一个人。如果你环顾四周也没发现,那可能你就是那个…

转:Redis 集群搭建详细指南

转自: https://www.cnblogs.com/mafly/p/redis_cluster.html 【README】 非常棒的一篇文章,感谢作者的分享; 先有鸡还是先有蛋? 最近有朋友问了一个问题,说毕业后去大城市还是小城市?去大公司还是小公…

快速排序算法思想及实现

简介 快速排序是对冒泡排序的一种改进,是一种分治算法,时间复杂度为O(nlogn) 基本思想 先从数列中取出一个数作为基准数。分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。再对左右区间重复第二步&a…

作为架构师,你必需要搞清楚的概念:POJO、PO、DTO、DAO、BO、VO

转载自 作为架构师,你必需要搞清楚的概念:POJO、PO、DTO、DAO、BO、VOPOJO、PO、DTO、DAO、BO、VO这些概念作为Java开发来说应该全部或者部分遇到过,作为架构师的你想必更是清楚这些概念在不同场景的应用。下面我逐一介绍一下,想必…