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

相关推荐
霸道流氓气质8 分钟前
ApiPost 中配置自动获取 Token 并调用业务接口完整指南
java·服务器·数据库
我不想名字重复11 分钟前
redis缓存和数据库数据保持一致
数据库·redis·缓存
独隅28 分钟前
IntelliJ IDEA 接入多种AI大模型插件终极指南(2026.1 企业合规版)
java·人工智能·intellij-idea
还是奇怪1 小时前
Simon Willison 用 DSPy 优化 Datasette Agent 提示词:提示工程正在变成可测试的软件工程
java·开发语言·软件工程
zfoo-framework1 小时前
1.ansible安装 2.虚拟机克隆
java
码上解惑1 小时前
从 Dify 工作流说起:常用节点怎么选、怎样组合?
java·人工智能·ai·agent·dify·智能体·spring ai
青山木2 小时前
Hot 100 --- 岛屿数量
java·数据结构·算法·leetcode·深度优先·广度优先
程序员-珍3 小时前
报错下载android sdk失败
android·java
流星白龙3 小时前
【Redis】8.List列表
redis
糖果店的幽灵3 小时前
langgraph分支之 - 动态分支(Dynamic Branch)
java·前端·javascript·人工智能·langgraph