redis 优势及 异常之缓存雪崩, 缓存穿透,击穿,预热,降级

redis 异常前端


缓存雪崩
缓存穿透
缓存击穿
缓存预热
缓存降级redis

1. 缓存雪崩是指缓存同一时间大面积的失效,因此,后面的请求都会落到数据库上,形成数据库短期内承受大量请求而崩掉。数据库

解决方案缓存

缓存数据的过时时间设置随机,防止同一时间大量数据过时现象发生。
通常并发量不是特别多的时候,使用最多的解决方案是加锁排队。
给每个缓存数据增长相应的缓存标记,记录缓存的是否失效,若是缓存标记失效,则更新数据缓存。数据结构

2.缓存穿透
缓存穿透是指缓存和数据库中都没有的数据,致使全部的请求都落到数据库上,形成数据库短期内承受大量请求而崩掉。并发

解决方案运维

接口层增长校验,如用户鉴权校验,id作基础校验,id<=0的直接拦截;
从缓存取不到的数据,在数据库中也没有取到,这时也能够将key-value对写为key-null,缓存有效时间能够设置短点,如30秒(设置太长会致使正常状况也无法使用)。这样能够防止攻用户反复用同一个id暴力攻
采用布隆过滤器,将全部可能存在的数据哈希到一个足够大的 bitmap 中,一个必定不存在的数据会被这个 bitmap 拦截掉,从而避免了对底层存储系统的查询压力

3.缓存击穿
缓存击穿是指缓存中没有但数据库中有的数据(通常是缓存时间到期),这时因为并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引发数据库压力瞬间增大,形成过大压力。和缓存雪崩不一样的是,缓存击穿指并发查同一条数据,缓存雪崩是不一样数据都过时了,不少数据都查不到从而查数据库。ide

解决方案性能

设置热点数据永远不过时。
加互斥锁,互斥锁接口

4.缓存预热就是系统上线后,将相关的缓存数据直接加载到缓存系统。这样就能够避免在用户请求的时候,先查询数据库,而后再将数据缓存的问题!用户直接查询事先被预热的缓存数据!

解决方案

直接写个缓存刷新页面,上线时手工操做一下;

数据量不大,能够在项目启动的时候自动进行加载;

定时刷新缓存;

5. 缓存降级
当访问量剧增、服务出现问题(如响应时间慢或不响应)或非核心服务影响到核心流程的性能时,仍然须要保证服务仍是可用的,即便是有损服务。系统能够根据一些关键数据进行自动降级,也能够配置开关实现人工降级。
缓存降级的最终目的是保证核心服务可用,即便是有损的。并且有些服务是没法降级的(如加入购物车、结算)。

6.热点数据和冷数据,缓存热点key

7.Redis 提供两种持久化机制 RDB(默认) 和 AOF 机制:当两种方式同时开启时,数据恢复Redis会优先选择AOF恢复。
8.Redis有哪些优缺点
优势

读写性能优异, Redis能读的速度是110000次/s,写的速度是81000次/s。
支持数据持久化,支持AOF和RDB两种持久化方式。
支持事务,Redis的全部操做都是原子性的,同时Redis还支持对几个操做合并后的原子性执行。
数据结构丰富,除了支持string类型的value外还支持hash、set、zset、list等数据结构。
支持主从复制,主机会自动将数据同步到从机,能够进行读写分离。
缺点

数据库容量受到物理内存的限制,不能用做海量数据的高性能读写,所以Redis适合的场景主要局限在较小数据量的高性能操做和运算上。Redis 不具有自动容错和恢复功能,主机从机的宕机都会致使前端部分读写请求失败,须要等待机器重启或者手动切换前端的IP才能恢复。主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,下降了系统的可用性。Redis 较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源形成了很大的浪费。

相关文章
相关标签/搜索