如何避免被击穿导致底层存储,比如 MySQL 等瞬间负载过高?
前提是,流量是从用户过来的,无法控制访问频次和访问中的数据。
https://www.cnblogs.com/xichj... 参考这篇文章的缓存击穿部分
###熔断,限流,降级
###一般采用加锁,获得到锁的进程,才能进入更新逻辑,其它进程进入短暂等待后重新读取.
再优化一步. 缓存的内容中,保存一个过期时间,这个时间小于redis key 设置的过期时间即可,当程序发现过期后,就尝试去获得锁,的到锁的进程进入更新逻辑,没有获得锁的逻辑,直接返回返回已经获得的过期数据.
在或者,redis 中是不存也不设置过期时间的,由外部的计划任务来维护,这种方式一般都是更新频率比较低,但是生成数据又耗时缓存,这种方式就在于数据不会过期,就算是更新逻辑挂了,缓存都还在,可以有兜底数据.