缓存击穿 Posted on 2018-09-20 在高并发下,多线程同时查询同一个资源,如果缓存中没有这个资源,那么这些线程都会去数据库查找,对数据库造成极大压力,缓存失去存在的意义。 当查询的时候,先从Redis集群中取,如果没有,那么再从DB中查询并设置到Redis集群中。 假设从DB中查询需要2S,那么显然这段时间内过来的请求,在上述的代码下,会全部走DB查询,相当于缓存被直接穿透,这样的现象就称之为“缓存击穿”! 解决办法: 通过synchronized + 双重检查机制: 在同步块中,继续判断检查,保证不存在,才去查DB。