目录
redis缓存提供了高并发高性能,不仅可以用作缓存还可以做抽奖、粉丝列表收藏点赞、订单自动取消等功能。Redis提供了这些便利的同时也会引发一些问题,例如缓存与数据库双写不一致、缓存雪崩、缓存穿透、缓存击穿、缓存的并发竞争、缓存过期失效等问题。
缓存雪崩
服务系统在高峰期每秒5w个请求,缓存可以扛住每秒5w个请求,缓存机器意外发生故障全盘宕机。此时5w个请求全部落数据库,数据库扛不住然后就挂了。重启数据库,然后数据库立马又被新的流量给打死了,这就是缓存雪崩。缓存雪崩的事前事中事后的解决方案:事前:Redis高可用,主从+哨兵,Redis cluster,避免全盘崩溃。事中:本地ehcache缓存 + hystrix限流&降级,避免MySQL被打死。事后:Redis持久化,一旦重启自动从磁盘上加载数据,快速恢复缓存数据。
用户发送一个请求,系统A收到请求后,先查本地ehcache缓存,如果没查到再查Redis。如果 ehcache和Redis都没有再查数据库,将数据库中的结果写入ehcache和Redis中。限流组件,可以设置每秒的请求,有多少能通过组件,剩余的未通过的请求,怎么办?走降级!可以返回一些默认的值,或者友情提示或者空值。这样设计的好处在于,无论多高的并发数据库绝对不会挂掉,限流组件确保了每秒只有多少个请求能通过。只要数据库不死,对用户来说,2/5的请求都是可以被处理的