缓存击穿

在高并发下,多线程同时查询同一个资源,如果缓存中没有这个资源,那么这些线程都会去数据库查找,对数据库造成极大压力,缓存失去存在的意义。

当查询的时候,先从Redis集群中取,如果没有,那么再从DB中查询并设置到Redis集群中。

假设从DB中查询需要2S,那么显然这段时间内过来的请求,在上述的代码下,会全部走DB查询,相当于缓存被直接穿透,这样的现象就称之为“缓存击穿”!

解决办法:

通过synchronized + 双重检查机制:

在同步块中,继续判断检查,保证不存在,才去查DB。