缓存雪崩
当缓存处于单点情况下,一旦缓存服务器崩溃,所有的请求就会落到数据库层,此时,如果由于访问量过大则会导致数据库宕机,进而导致整个网站或服务不可用,这种缓存故障就是俗称的缓存雪崩
解决方案1:解决缓存雪崩故障,就得解决单点问题,提高缓存高可用性,建立分布式的高可用缓存系统,一台缓存服务器挂了,另外的一台起来继续工作,更不能影响其他的缓存系统。
解决方案2:使用缓存预热将常用的热词在缓存服务重启之前就把要缓存的热点数据加载到缓存中,这样就可以大大的江减轻对数据库的请求。
缓存穿透
如果某个key对应的数据不存在,而又未对该key做缓存,所以每次请求都会穿过缓存直接到数据库进行查询,并发量高的情况下进而导致数据库直接宕机,这就是缓存穿透。
解决方案:解决缓存穿透,如果做了缓存就要把null值或者空列表等也要缓存起来。如果是恶意攻击一个不存在的key,在控制层做频率限制是必须的。
多台缓存服务器同时使用怎样分配
1.将服务器按下列方法排列(一致性hash方式)若增加服务器,可以减少对服务器之前缓存内容的影响(如在0-10之间加服务器,定义为5,若按逆时针计算,则仅对5-10之间产生影响
一致性hash :
分布式环境算法
将要存入缓存中的数据进行MD5加密 使用ord()转化为asscii码 转化为整形 求和 进行取模运算有几除几 余数是几就存到那个服务器上 一致性hash的优点在于加入和删除节点时只会影响到在哈希还种相邻的节点,而对其他节点没有影响。