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

相关推荐
Elias不吃糖16 小时前
Java Lambda 表达式
java·开发语言·学习
情缘晓梦.17 小时前
C语言指针进阶
java·开发语言·算法
鲨莎分不晴17 小时前
Redis 基本指令与命令详解
数据库·redis·缓存
南知意-18 小时前
IDEA 2025.3 版本安装指南(完整图文教程)
java·intellij-idea·开发工具·idea安装
笔墨新城18 小时前
Agent Spring Ai 开发之 (一) 基础配置
人工智能·spring·agent
码农水水19 小时前
蚂蚁Java面试被问:混沌工程在分布式系统中的应用
java·linux·开发语言·面试·职场和发展·php
海边的Kurisu19 小时前
苍穹外卖日记 | Day4 套餐模块
java·苍穹外卖
毕设源码-邱学长19 小时前
【开题答辩全过程】以 走失儿童寻找平台为例,包含答辩的问题和答案
java
他们叫我技术总监20 小时前
Python 列表、集合、字典核心区别
android·java·python
江沉晚呤时20 小时前
从零实现 C# 插件系统:轻松扩展应用功能
java·开发语言·microsoft·c#