Redis热点Key,雪崩,渗透,并发和解决方案

缓存雪崩前端

数据没有加载到缓存或者缓存存在大范围失效,致使全部请求都要访问数据库,致使数据库CPU和内存过载甚至致使数据库没法响应请求和系统崩溃。数据库

缓存雪崩的过程缓存

Redis集群大面积故障,但仍然有大量的请求访问缓存访问,因为缓存失败,大量的请求则转向数据库如MySQL,MySQL不能快速作出相应或者中止工做。因为大量的应用依赖MySQL和Redis,它将会致使服务器集群崩溃。最终应用(网站)将测底瘫痪。服务器

解决方案微信

高可用缓存 Redis Sentinel和Redis Cluster 都是高可用的,以防止大量的缓存失败。即便,单独的节点甚至区域机房都关闭,仍然能够提供服务 。并发

Redis Sentinel除了提供高可用还提供其余附属任务,如监控,通知。 缓存降级 降级是保证核心服务可用,当访问量急剧增长而且分布式缓存不可用时,服务降级,访问本地缓存是主要的解决方案。系统可用预先设置好的关键数据进行自动降级或者经过配置开关实现手动降级,手动降级须要运维或者开发的配合。运维

例如,在推荐系统中,有不少个性化需求,若是个性化需求不能提供服 务,可 以经过降级来补充热门数据,以免在前端页面产生大量的空白。分布式

服务降级方案,须要提早梳理哪些是核心业务必须保证正常服务,哪些业务可            以临时不提供服务,使用静态页面替换,还要评估服务器的核心指标以及设置后            总体方案。
复制代码

Redis备份和快速预热 缓存渗透
缓存渗透是指在Redis中没有命中,则请求就会转发到MySQL数据进行查询。若是MySQL里面也没查询到数据就很差写缓存。这将致使不存在的数据每次请求都要查询数据库。网站

解决方案spa

若是数据库查询的数据为空,能够设置个默认的值存储到缓存中,以便第二次请求从缓存获取值而不继续访问数据库。须要对设置的默认值设置过时时间或者在数据库查询到的值时替换缓存的默认值。也能够为Key设置写规则,在查询前过滤不规则的Key。
复制代码

缓存并发 多个Redis客户端同时设置Key的值致使的并发性问题。

解决方案

Redis是单线程的,具备epoll / kqueue,而且在I / O并发方面能够无限扩展。固然,另外一个解决方案是序列化Redis。在队列中逐个设置操做

缓存预热 缓存预热是在系统联机后把相关的数据直接加载到缓存中,客户端请求直接查询在缓存的数据。避免先查询数据再写缓存的问题。

解决方案

在前端作刷新缓存的功能并在联机时手动操做;或者在系统启动时自动把数据加载到缓存,当数据量不大的的时候能够这样作。

如何加载大量数据集到Redis中,例如数十亿个键?Redis 2.6的版本后能够利用 pipe mode 。

微信公众号同步

相关文章
相关标签/搜索