(5)缓存击穿(2)

2020-11-06  本文已影响0人  hedgehog1112

击穿:设置过期时间key,某个时刻批量过期,大亮请求直接落db上。和雪崩区别雪崩很多key

解决方案

一、用互斥锁(mutex key)

常用做法,用mutex。缓存失效时,不立即load db,先用缓存工具的某些带成功操作返回值的操作(如Redis的SETNX)set一个mutex key,操作返回成功,再load db设缓存;否则重试整个get缓存方法

二、"提前"使用互斥锁(mutex key):

value内部设置超时值timeout1, 比实际的memcache timeout2小。从cache读取到timeout1发现它已经过期时,马上延长timeout1并重新设置到cache。再从db加载数据并设置到cache

三、 "永远不过期"

包含两层意思:

    (1) 从redis上看,没设置过期时间,保证不出现热点key过期问题,“物理”不过期

    (2) 从功能上看,如不过期,就成静态,所以把过期时间存在key对应value里,发现过期,通异步线程构建缓存,“逻辑”不过期

从实战看,性能非常友好,不足就是构建缓可能访问老数据,一般可忍受

四、资源保护

用netflix的hystrix,做资源隔离保护主线程池,应用到缓存构建

四种解决方案:没有最佳只有最合适

https://blog.csdn.net/zeb_perfect/article/details/54135506

上一篇 下一篇

猜你喜欢

热点阅读