博客
关于我
1.Redis(缓存数据库)系列之认识redis缓存【穿透、击穿、雪崩】
阅读量:285 次
发布时间:2019-03-03

本文共 533 字,大约阅读时间需要 1 分钟。

1.缓存使用场景

当用户使用我们的网站/APP时,数据来源基本是我们的底层数据库

当用户量大时,我们的数据库读写压力也会随之增加,一般情况下,我们的方法是会缓存一下热点数据,

缓存数据的目的:(1)可以直接使用户通过网站/APP从缓存中获取数据并获取响应

                            (2)也会减轻数据库的压力

 2.考虑缓存存在的问题

问题:当缓存不可用时,用户的请求会直接落在数据库上,在高并发/遭受攻击时,数据库就会崩溃。

3.当缓存可用,也会遇到如下问题

(1)缓存穿透【指的是当用户请求时,本身就不存在的缓存,会直接请求数据库,如果遇到高并发/攻击,会造成缓存穿透】

解决办法:

  • 使用布隆过滤器判断缓存中是否存在
  • 为请求设置一个值为null的缓存,设置较短的过期时间

(2)缓存击穿【指的是当用户请求时,缓存失效,会直接从数据库中重新拿取缓冲,并存入缓存,如果在获取缓存时遇到高并发,数据库压力过大会造成缓存击穿】

解决办法:

  • 热点数据缓存永不过期
  • 采用分布式锁,缓存失效后只有一个线程更新并写入

(3)缓存雪崩【指的是大面积的缓存击穿或服务不可用】

解决办法:

  • 使用Redis哨兵或者集群等架构提升可用性
  • 采用和缓存击穿一样的方式
  • 错开缓存数据的过期时间点,防止缓存大面积失效

随手记

 

 

 

 

转载地址:http://mqgl.baihongyu.com/

你可能感兴趣的文章
C++ 任意数据类型转为16进制输出
查看>>
PYTHON UDP只能接收本地报文,无法接收其他主机通过路由器发过来的报文
查看>>
QLabel控件功能示例
查看>>
Python对象和引用计数 object.h文档
查看>>
springcloud学习:rpc和http的区别,各自的优缺点
查看>>
java进程、线程知识扩充
查看>>
vue项目中报/sockjs-node/info错误
查看>>
【公众】localhost:8080找不到tomcat猫界面,并且报404错误原因
查看>>
如何处理前任程序员留下的代码
查看>>
来自投资银行的20个Java面试题
查看>>
20个非常有用的Java程序片段
查看>>
Dubbo架构设计详解
查看>>
如何锻炼JAVA编程思路?
查看>>
Mybatis源码分析(四):属性接口之objectFactory
查看>>
全面了解 Nginx 主要应用场景
查看>>
如何解决秒杀的性能问题和超卖的讨论
查看>>
【系统日志】log4j配置学习总结
查看>>
2019年1月已到,Java 8 要收费了吗?
查看>>
最全的spring面试题和答案
查看>>
CentOS 8 已下载ntpdate 却无法使用crond进行时间同步
查看>>