一、缓存雪崩:
1. 原因:
缓存雪崩是指在我们设置缓存时大量采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB,DB瞬时压力过重雪崩。
2.解决方案:
- 将失效时间分散,通过生成随机数使得key的过期时间为随机,防止集体过期。
- 使用多级架构,nginx缓存+redis缓存+其他缓存,不同层使用不同缓存,可靠性更强。
- 设置缓存标记,如果过期通知其他线程在后台更新实际的key。这种方法对于性能非常友好,唯一不足的就是构建缓存时候,其余线程(非构建缓存的线程)可能访问的是老数据
- 使用锁或者队列的方式
- 使用排他锁,其他请求只能等待。
二、缓存穿透:
1.原因:
缓存穿透是指大量数据查服务器托管网询一个不存在的数据,在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。
2.解决方案:
- 采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。
- 如果一个查询返回的数据为空(不管是数 据不存在,还是系统故障),仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。
三、缓存击穿:
1.原因:
热点key过期,大量数据访问过期key
缓存在某个时间点过期的时候,恰好在这个时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。
2.解决方案:
- 提前对热点数据进行设置。对于新闻,某博等热点数据预先设置在redis中
- 监控数据,对热点数据实时调整key过期时长。
- 使用锁,加锁或者队列的方式保证缓存的单线 程(进程)写,从而避免服务器托管网失效时大量的并发请求落到底层存储系统上。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
目录 1. 本章前瞻 2.来自leetcode的例题 描述 分析 题解 3. 复合类型新版本的变化 3.1 string和[]byte的高效转化 3.2 内置函数clear 4. 复合类型概述 4.1 切片 4.2 映射 4.3 字符串 4.3.1 字符串的底…