[日常踩坑]--(12)Redis锁释放
Author:赵志乾
Date:2020-07-28
Declaration:All Right Reserved!!!
踩坑:
场景:获取Redis锁,完成业务逻辑后释放锁
做法:try语句中获取Redis锁,finally语句中释放锁,代码如下:
try{// step1: 获取锁--默认过期时间15秒boolean result = jedisTemplate.getLock(lockKey);if(!result){// 抢锁失败return;}// step2: 业务逻辑
}catch(Exception ex){// step3: 异常处理逻辑
}finally{// step4: 释放锁jedisTemplate.releaseLock(lockKey);
}
解决方案:
上述问题在于释放锁之前未加判定。如果未获取锁,会导致锁被提前释放;对于锁的释放要依据锁的获取位置进行处理。解决方案有以下两种:
方案1: try语句之外获取锁,成功获取锁之后才可进入try语句
// step1: 获取锁--默认过期时间15秒
boolean result = jedisTemplate.getLock(lockKey);
if(!result){// 抢锁失败return;
}try{// step2: 业务逻辑
}catch(Exception ex){// step3: 异常处理逻辑
}finally{// step4: 释放锁jedisTemplate.releaseLock(lockKey);
}
方案2: try语句内获取锁,释放前判定是否已获得锁
boolean result = false;
try{// step1: 获取锁--默认过期时间15秒result = jedisTemplate.getLock(lockKey);if(!result){// 抢锁失败return;}// step2: 业务逻辑
}catch(Exception ex){// step3: 异常处理逻辑
}finally{// step4: 释放锁if(result){jedisTemplate.releaseLock(lockKey);}
}
[日常踩坑]--(12)Redis锁释放相关推荐
- 日常踩坑记录-汇总版
开发踩坑记录,不定时更新 心得 RTFM 严谨的去思考问题,处理问题 严格要求自己的代码编写习惯与风格 注意 单词拼写 20200207 mybatis plus 自带insert插入异常 sql i ...
- 【日常踩坑】Android机微信webview中页面跳转的问题
今天分享一个前端君踩到的小坑,在webapp中,如果我们要代码实现刷新当前页面的话,相信很多人都习惯用: window.location.reload(); 使用 .reload() 方法实现刷新页面 ...
- Eclipse日常踩坑记录——导入文件时遇到的几个问题
今天在学习过程中,导入了一个教学视频中已经写好的文件,其中遇到了几个问题. 一.jsp文件文件出错 原因:Tomcat没有进入所以出现大量报错,需要引入Tomcat(百度来的,具体也不是太懂) 解决步 ...
- 小白踩坑记-Redis的安装与使用
Redis的安装与使用 文章目录 Redis的安装与使用 1 Window安装redis 1.1 下载redis源码压缩包 1.2 配置环境变量 1.3 开启命令行服务 1.4 将redis服务添加到 ...
- (面试踩坑)redis可以替代MySQL吗?
背景: 面试官:redis你学过吧,听你的语气我想你redis学的不错吧? 我:- 面试官:那好,我问你一个很简答的问题哈,你说一下redis可以替换MySQL吗?你简单说一下就好. 我:(一般面试官 ...
- redis踩坑:redis哨兵开启了保护模式导致主从切换不同步
故障表现 哨兵只存在两个的时候,当哨兵模式的redis主节点挂掉以后,业务组件不能切换到新主节点 故障原因 redis哨兵依旧认为旧主为主节点,没有触发failover 故障原因定位 哨兵集群部署方式 ...
- 日常踩坑:python新项目创建新的虚拟环境、pycharm无法安装install package工具、pip的缓存作用
一.一单子从git上下载项目到桌面后,用自己的python环境配置,成功后觉得这样不行,项目交付的时候无法让客户直接运行,所以搜了搜,使用项目文件夹的虚拟环境办法: 在当前文件夹得venv下的里面,这 ...
- 日常踩坑:odule ‘tensorflow‘ has no attribute ‘placeholder‘解决方案
出现错误 odule 'tensorflow' has no attribute 'placeholder' 我还以为是我电脑没有独显导致的,后来一看是tensorflow的版本问题 解决方案 把im ...
- 日常踩坑:pip安装包速度过慢,更换国内镜像源(亲测有效)
step1:在C:\Users\你的用户名下创建pip文件夹: step2:pip文件夹中创建文件pip.ini文件: step3:记事本打开pip.ini文件,复制以下语句进去 [global] i ...
最新文章
- linux安装nginx源码,CentOS7源码编译安装Nginx
- java调用存储过程sqlserver_Java调用SqlServer存储过程怎么实现 | 学步园
- 【NLP实战系列】朴素贝叶斯文本分类实战
- mysql换成oracle_mysql数据库迁移至Oracle数据库
- Linux 没有主清单属性,maven编译正常,运行报错:中没有主清单属性
- AM335 嵌入式 linux,am335x开发板建立嵌入式 Linux NFS 开发环境
- Navicat for MySQL连接MySQL数据库时各种错误解决
- pytorch中gather函数的理解
- 计算机手速如何学,南华学子巧用计算机,比拼手速与才思
- C语言内建函数:__builtin_XXX
- 使用Java反射(Reflect)、自定义注解(Customer Annotation)生成简单SQL语句
- 【文本摘要】BottleSum——文本摘要论文系列解读
- Linux 之 shell 比较运算符
- 关系模型的完整性约束
- 合肥青少年信息学计算机竞赛试题,合肥市第二十九届青少年信息学奥林匹克竞赛(小学组)试题及部分答案...
- 什么是rich text,富文本?富文本有什么优势?
- SHON WEBB:坚持做这四件事,会让你的自律达到新的高度
- 锤子手机关闭位置服务器,技巧:锤子手机的4个隐藏小技巧 处处有情怀
- android l m8,搭Android L HTC M8曝新系统截图
- 【视频码率相关笔记】