//如果数据过期则返回旧数据并获取互斥锁开启新线程重建缓存
Boolean isLock = tryLock(LOCK_SHOP_KEY + id, 30l, TimeUnit.SECONDS);
//获取锁成功
if (isLock) {
log.error("成功获取锁");
try {
CACHE_REBUILD_EXECUTOR.submit(() -> {
saveShop2Redis(id, 10l);
});
} catch (Exception e) {
throw new RuntimeException(e);
}
finally{
unLock(LOCK_SHOP_KEY + id);
}
}
return shop;
boolean isLock = tryLock(lockKey,30l, TimeUnit.SECONDS);
// 6.2.判断是否获取锁成功
if (isLock){
CACHE_REBUILD_EXECUTOR.submit( ()->{
try{
//重建缓存
this.saveShop2Redis(id,10L);
}catch (Exception e){
throw new RuntimeException(e);
}finally {
unLock(lockKey);
}
});
}
// 6.4.返回过期的商铺信息
return shop;
仔细看这两段代码的差异、下面的对