1、 redis缓存雪崩问题
19.01.01更新
redis缓存雪崩是什么?
正常请求是请求 redis 缓存的数据的,但是数据库没有更新同步 redis数据库,导致请求都去请求mysql 数据库,造成mysql 压力超载;
解决这样的问题,杜绝这样的问题发生、一般从这个方面来考虑:
发生之前如何杜绝、发生了如何处理保证服务无影响、发生之后怎么处理快速恢复;
1.1、redis缓存雪崩了怎么解决?解决雪崩分为:事前,事中,事后3个阶段。
1、首先维护高可用、分散的设置redis数据失效时间
假设1W条数据同时失效,那这些request同时请求mysql数据库,造成数据库瞬时压力过大;
https://blog.csdn.net/weixin_42323802/article/details/85114249
2、采取ehcache和hystrix限流、服务降级 的措施;
3、redis持久化机制,宕机后恢复自动读取数据,恢复服务状态;
1.2、另外一种解决在数据库加锁
1、这种方式,治标不治本;
加锁或者队列来控制读数据库写缓存的线程数量,来保证mysql数据库是活着的,但是不能保证高并发;
同一个key,10个请求过来剩下9个请求需要排队等待线程释放锁、显然用户体验很差
2、消息中间件可以解决高并发的问题
redis宕掉以后或者请求的数据不在redis中时候,请求都积压到MQ中,MQ同步mysql 查询数据、
3、
2、 redis缓存穿透问题
2.1、redis穿透是什么?怎么解决?
请求是假请求,黑客发的大量请求,缓存中并不存在这些请求,直接访问mysql数据库,这样到一定并发量时候,mysql宕机;简单说,无视redis 缓存,直接访问mysql 数据库;
解决:
当攻击请求在redis 中找不到时候,访问数据库也查不到,就返回一个
值error 并写到redis缓存中,这样下次访问时候,同一请求就会走redis并返回一个error 给黑客;