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

相关推荐
小鹿学程序3 分钟前
jdk配置完之后java -version还是默认的jdk版本如何更改
java·开发语言·python
她说彩礼65万6 分钟前
C# 反射
java·算法·c#
hhy_smile13 分钟前
Android 与 java 设计笔记
android·java·笔记
lkbhua莱克瓦2418 分钟前
IO练习——网络爬虫(爬取数据)
java·开发语言·爬虫·io流练习·java练习
喇一渡渡18 分钟前
Java力扣---滑动窗口(1)
java·算法·排序算法
一水鉴天23 分钟前
整体设计 之28 整体设计 架构表表述总表的 完整程序(之27 的Q268 )(codebuddy)
java·前端·javascript
net3m3325 分钟前
雅特力单片机用串口USART_INT_TDE中断比用USART_INT_TRAC的 发送效率要高
java·开发语言·算法
雪碧聊技术26 分钟前
深入解析:Java中int类型转换为String类型的多种方法
java·整数转为字符串
BD_Marathon35 分钟前
【JavaWeb】启动tomcat报错:启动子级时出错
java·tomcat