spring项目中如何通过redis的setnx实现互斥锁解决缓存缓存击穿问题

通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获取锁失败,休眠一段时间再尝试去执行查询操作

相关推荐
WX-bisheyuange8 小时前
基于Spring Boot的民宿预定系统的设计与实现
java·spring boot·后端·毕业设计
q***71019 小时前
开源模型应用落地-工具使用篇-Spring AI-Function Call(八)
人工智能·spring·开源
码界奇点9 小时前
Java设计模式精讲从基础到实战的常见模式解析
java·开发语言·设计模式·java-ee·软件工程
q***94410 小时前
springboot接入deepseek深度求索 java
java·spring boot·后端
诗9趁年华10 小时前
深入分析线程池
java·jvm·算法
百***060110 小时前
SpringBoot的@Scheduled和@Schedules有什么区别
java·spring boot·spring
喵了几个咪10 小时前
使用Bazel构建你的Kratos微服务
java·运维·微服务
千寻技术帮11 小时前
50022_基于微信小程序同城维修系统
java·mysql·微信小程序·小程序·同城维修
野蛮人6号11 小时前
黑马八股笔记
java
Charles_go11 小时前
41、C#什么是单例设计模式
java·设计模式·c#