通tryLock尝试去获取锁,如果获取到返回true,没有获取到则返回false
private boolean tryLock(String key){
Boolean result = redisTemplate.opsForValue().setIfAbsent(key, "1", 10L, TimeUnit.SECONDS);
return BooleanUtil.isTrue(result);
}
private void releaseLock(String key){
redisTemplate.delete(key);
}
互斥锁解决缓存穿透的整体流程是:
1.请求到缓存当中拿数据,如果拿到,则返回
2.没有拿到数据,则尝试去获取互斥锁
2.1获取锁成功,则去数据库中取数据,取到后重建缓存
2.2获取锁失败,休眠一段时间再尝试去执行查询操作