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锁释放相关推荐

  1. 日常踩坑记录-汇总版

    开发踩坑记录,不定时更新 心得 RTFM 严谨的去思考问题,处理问题 严格要求自己的代码编写习惯与风格 注意 单词拼写 20200207 mybatis plus 自带insert插入异常 sql i ...

  2. 【日常踩坑】Android机微信webview中页面跳转的问题

    今天分享一个前端君踩到的小坑,在webapp中,如果我们要代码实现刷新当前页面的话,相信很多人都习惯用: window.location.reload(); 使用 .reload() 方法实现刷新页面 ...

  3. Eclipse日常踩坑记录——导入文件时遇到的几个问题

    今天在学习过程中,导入了一个教学视频中已经写好的文件,其中遇到了几个问题. 一.jsp文件文件出错 原因:Tomcat没有进入所以出现大量报错,需要引入Tomcat(百度来的,具体也不是太懂) 解决步 ...

  4. 小白踩坑记-Redis的安装与使用

    Redis的安装与使用 文章目录 Redis的安装与使用 1 Window安装redis 1.1 下载redis源码压缩包 1.2 配置环境变量 1.3 开启命令行服务 1.4 将redis服务添加到 ...

  5. (面试踩坑)redis可以替代MySQL吗?

    背景: 面试官:redis你学过吧,听你的语气我想你redis学的不错吧? 我:- 面试官:那好,我问你一个很简答的问题哈,你说一下redis可以替换MySQL吗?你简单说一下就好. 我:(一般面试官 ...

  6. redis踩坑:redis哨兵开启了保护模式导致主从切换不同步

    故障表现 哨兵只存在两个的时候,当哨兵模式的redis主节点挂掉以后,业务组件不能切换到新主节点 故障原因 redis哨兵依旧认为旧主为主节点,没有触发failover 故障原因定位 哨兵集群部署方式 ...

  7. 日常踩坑:python新项目创建新的虚拟环境、pycharm无法安装install package工具、pip的缓存作用

    一.一单子从git上下载项目到桌面后,用自己的python环境配置,成功后觉得这样不行,项目交付的时候无法让客户直接运行,所以搜了搜,使用项目文件夹的虚拟环境办法: 在当前文件夹得venv下的里面,这 ...

  8. 日常踩坑:odule ‘tensorflow‘ has no attribute ‘placeholder‘解决方案

    出现错误 odule 'tensorflow' has no attribute 'placeholder' 我还以为是我电脑没有独显导致的,后来一看是tensorflow的版本问题 解决方案 把im ...

  9. 日常踩坑:pip安装包速度过慢,更换国内镜像源(亲测有效)

    step1:在C:\Users\你的用户名下创建pip文件夹: step2:pip文件夹中创建文件pip.ini文件: step3:记事本打开pip.ini文件,复制以下语句进去 [global] i ...

最新文章

  1. linux安装nginx源码,CentOS7源码编译安装Nginx
  2. java调用存储过程sqlserver_Java调用SqlServer存储过程怎么实现 | 学步园
  3. 【NLP实战系列】朴素贝叶斯文本分类实战
  4. mysql换成oracle_mysql数据库迁移至Oracle数据库
  5. Linux 没有主清单属性,maven编译正常,运行报错:中没有主清单属性
  6. AM335 嵌入式 linux,am335x开发板建立嵌入式 Linux NFS 开发环境
  7. Navicat for MySQL连接MySQL数据库时各种错误解决
  8. pytorch中gather函数的理解
  9. 计算机手速如何学,南华学子巧用计算机,比拼手速与才思
  10. C语言内建函数:__builtin_XXX
  11. 使用Java反射(Reflect)、自定义注解(Customer Annotation)生成简单SQL语句
  12. 【文本摘要】BottleSum——文本摘要论文系列解读
  13. Linux 之 shell 比较运算符
  14. 关系模型的完整性约束
  15. 合肥青少年信息学计算机竞赛试题,合肥市第二十九届青少年信息学奥林匹克竞赛(小学组)试题及部分答案...
  16. 什么是rich text,富文本?富文本有什么优势?
  17. SHON WEBB:坚持做这四件事,会让你的自律达到新的高度
  18. 锤子手机关闭位置服务器,技巧:锤子手机的4个隐藏小技巧 处处有情怀
  19. android l m8,搭Android L HTC M8曝新系统截图
  20. 【视频码率相关笔记】

热门文章

  1. MySQL 8.0.22 Bug #101504 对应解决思路
  2. 本地图片转为file类型
  3. 爬虫学习(2):贴吧之骑马与砍杀2,愿它长寿?
  4. 快速入手springboot
  5. 计算机基础理论笔试题
  6. 【1、雅思听力】何琼口语学习记录 第一节
  7. 薇美姿赴港上市:从小本生意做到“国货牙膏第一股”
  8. 一加8和一加8pro区别
  9. Android 列表视频的全屏、自动小窗口优化实践
  10. 第04课:选择技术方向都要考虑哪些因素(下)