本文章用于自己学习的操作,如果文章中有错误,麻烦各位留言指正,自己测试单流程是没有问题的

加锁

//调用加锁
boolean lock = redisService.getLock(resourceInfoId.toString(), String.valueOf(Thread.currentThread().getId()));if (lock == false) {return new FebsResponse().fail().message("当前资源正在审核中,请勿重复提交!");}//调用解锁 ps:无论程序运行是否成功,都要释放锁,否则可能导致陷入死锁,如果是try方式,将解锁调用放在finally里面
try{}finally{redisService.releaseLock(resourceInfoId.toString(), String.valueOf(Thread.currentThread().getId()));
}//静态参数
private static final String LOCK_SUCCESS = "OK";
private static final String SET_IF_NOT_EXIST = "NX";
private static final String SET_WITH_EXPIRE_TIME = "PX";
private static final Long RELEASE_SUCCESS = 1L;//加锁方法
@Override
public boolean getLock(String key,String requestId) {String result = jedisPool.getResource().set(key, requestId, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, 10);if (LOCK_SUCCESS.equals(result)) {return true;}return false;
}        //解锁方法
@Override
public boolean releaseLock(String key,String requestId) {String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";Object result = jedisPool.getResource().eval(script, Collections.singletonList(key), Collections.singletonList(requestId));if (RELEASE_SUCCESS.equals(result)) {return true;}return false;}
ps:上述代码不够完善,上线后发现,程序报错异常信息:Could not get a resource from the pool,然后修改一下,示例一下加锁方法,解锁方法同样要释放连接池public boolean getLock(String key,String requestId) {Jedis jedis = null;try{jedis = jedisPool.getResource();String result = jedis.set(key, requestId, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, 10);if (LOCK_SUCCESS.equals(result)) {return true;}}finally {if(null != jedis){jedis.close();}}return false;}

redis加锁和解锁相关推荐

  1. redis加锁、解锁

    在Java中,关于锁我想大家都很熟悉.在并发编程中,我们通过锁,来避免由于竞争而造成的数据不一致问题.通常,我们以synchronized .Lock来使用它. 但是Java中的锁,只能保证在同一个J ...

  2. JAVA实现Redis锁(加锁与解锁),快速高效实现Redis加锁与解锁

    //获得锁 RLock locker = RedisUtil.getClient().getLock("锁的名字,例:Locker:TestLockA");//上锁 locker. ...

  3. 使用redis的setnx可以非同一线程进行加锁和解锁(附源码)

    使用redis的setnx可以非同一线程进行加锁和解锁(附源码) 问题背景 项目搭建 总结 Lyric: 那在终点之前 问题背景 Redisson做分布式锁是目前比较流行的方式,但是在使用的过程中遇到 ...

  4. Redis实现分布式锁:加锁、解锁、续租和一致

    目录 分布式锁及其应用场景 为何需要分布式锁 分布式锁的特性 互斥性 不死锁 一致性 可重入性 支持阻塞和非阻塞: 支持公平锁和非公平锁(可选) 使用原生Redis实现分布式锁 加锁 解锁 续租 如何 ...

  5. Redis系列-远程连接redis并给redis加锁

    假设两台Redis服务器,ip分别为:192.168.1.101和192.168.1.103,如何在101上通过redis-cli访问103上的redis呢?在远程连接103之前,先讲下redis-c ...

  6. java队列加锁_java并发-----浅析ReentrantLock加锁,解锁过程,公平锁非公平锁,AQS入门,CLH同步队列...

    前言 为什么需要去了解AQS,AQS,AbstractQueuedSynchronizer,即队列同步器.它是构建锁或者其他同步组件的基础框架(如ReentrantLock.ReentrantRead ...

  7. ReentrantLock 公平锁和非公平锁加锁和解锁源码分析(简述)

    - title: ReentrantLock 公平锁和非公平锁加锁和解锁源码分析(简述) - date: 2021/8/16 文章目录 一.ReentrantLock 1. 构造函数 二.Reentr ...

  8. mysql数据库加锁语句_sql语句对数据库表进行加锁和解锁

    锁是数据库中的一个非常重要的概念,它主要用于多用户环境下保证数据库完整性和一致性. 我们知道,多个用户能够同时操纵同一个数据库中的数据,会发生数据不一致现象.即如果没有锁定且多个用户同时访问一个数据库 ...

  9. UNIX操作系统中加锁和解锁

    Unix操作系统加锁和解锁的基本思想是,当某个进程进入临界区,它将持有一个某种类型的锁(UNIX里一般来说是semaphore,Linux里一般是信号量和原子量或者spinlock).当其他进程在该进 ...

最新文章

  1. ADO.NET Entity Framework 简介
  2. 英文题,我恨你啊..
  3. hexo + Github 搭建问题综述
  4. rust营火为什么放不下去_从一个研发质量案例看,5why分析法,为什么分析不下去了?...
  5. Perform the Combo CodeForces - 1311C(字符串反转+树状数组)
  6. 利用Delphi-cross-socket 库提升kbmmw 跨平台开发
  7. Android权威编程指南读书笔记(1-2章)
  8. 免费可商用中文字体打包下载
  9. 2020届秋招中兴笔试题
  10. 深度解读:2021 中国低代码平台发展现状
  11. Excel功能逻辑结构图
  12. SoundTouch音频处理库
  13. 学习Hibernate框架笔记-第3天
  14. 调用Powergui FFT Analysis Tool进行FFT分析
  15. mysql XA 分布式事务、DTM TCC事务(多语言支持)
  16. 5.3 - 抽屉新热榜
  17. Java悲观锁Pessimistic-Lock常用实现场景
  18. 全国计算机一级证书重点知识,全国计算机一级
  19. excel中时间加分钟运算公式
  20. JavaScript练习--[使用js语言实现网页切换图片的效果]

热门文章

  1. 关于睡眠检测自定义VIEW
  2. html 发言样式,HTML样式
  3. 电脑文档被删了怎么恢复?小方法好助手
  4. mapbox-gl开发教程(二):地图主要配置参数说明
  5. 计算机毕业设计Java智能超市导购系统(源码+系统+mysql数据库+lw文档)
  6. 不用运动快速有效减肥——红光光浴#大健康#红光光浴#红光#种光光学
  7. i7 12700h和i5 12500h哪个好 酷睿12500H和12700H差别
  8. web前端做汽车之家官网,HTML5+CSS3+JS
  9. cdr 表格自动填充文字_长期伏案于表格,查看数据时你需要一个聚光灯效果
  10. LIN Bus | 一个应用广泛的串行通信协议