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

相关推荐
ywf12153 分钟前
Spring Integration + MQTT
java·后端·spring
liuyao_xianhui17 分钟前
优选算法_两数之和_位运算_C++
java·开发语言·数据结构·c++·算法·链表·动态规划
靠沿17 分钟前
【优选算法】专题十六——BFS解决最短路径问题
redis·算法·宽度优先
大傻^18 分钟前
Spring AI 2.0 企业级 RAG 架构:混合检索、重排序与多模态知识库
人工智能·spring·架构·多模态·rag·混合检索·重排序
ps酷教程20 分钟前
spring batch动态示例
spring·batch
李白的粉21 分钟前
基于springboot的知识管理系统
java·spring boot·毕业设计·课程设计·知识管理系统·源代码
知识分享小能手21 分钟前
edis入门学习教程,从入门到精通,Redis编程开发知识点详解(4)
数据库·redis·学习
大傻^24 分钟前
Spring AI 2.0 多模型提供商配置:OpenAI、Gemini、Anthropic 与 Ollama 深度集成
java·人工智能·spring·springai
爱丽_25 分钟前
JVM 堆参数怎么设:先建立内存基线,再谈性能优化
java·jvm·性能优化
cyforkk36 分钟前
IntelliJ IDEA 配置 Java 类全局注释模板操作指南
java·ide·intellij-idea