当前位置: 首页 > news >正文

redis悲观锁和乐观锁

redis悲观锁

Redis加锁命令分有INCR、SETNX、SET
一、INCR锁
key不存在时,key的值会先被初始化为0,其它用户在执行INCR操作进行加一,
如果返回的数大于1,说明这个锁正在被使用当中,通常用在同时只能有一个人可以操作某个行为。

二、SETNX锁
当key不存在时,将key设置为value,如果key已存在,则SETNX不做任何动作。

三、SET锁
设置成功就表示加锁成功,设置失败就是加锁失败。只有一个人持有。

仔细看会发现,都是先设置值,如果成功则表示获取锁成功,然后再执行业务代码,在释放锁。所以都属于悲观锁。

乐观锁:
Redis的乐观锁主要是通过watch()来实现的,watch()的作用是监视键值对,首先是用multi()开启事务,exec()提交事务,提交事务的时候如果发现键值对的值发生变化则会取消事务,

public void watch() {String watchKeys = "watchKeys";//初始值 value=1jedis.set(watchKeys, 1);//监听key为watchKeys的值jedis.watch(watchkeys);//开启事务Transaction tx = jedis.multi();//watchKeys自增加一tx.incr(watchKeys);//执行事务,如果其他线程对watchKeys中的value进行修改,则该事务将不会执行//通过redis事务以及watch命令实现乐观锁List<Object> exec = tx.exec();if (exec == null) {System.out.println("事务未执行");} else {System.out.println("事务成功执行,watchKeys的value成功修改");}
}
http://www.lryc.cn/news/233734.html

相关文章:

  • 前端项目练习,首页退出登录功能,清除token --点击事件 quitFn
  • nodejs+vue杰和牧场管理系统的设计与实现-微信小程序-安卓-python-PHP-计算机毕业设计
  • 基于STM32的蓝牙低功耗(BLE)通信方案设计与实现
  • qt 重载信号,使用““方式进行connect()调用解决方案
  • 阿里云+宝塔部署项目(Java+React)
  • Linux_系统信息_uname查看内核版本、内核建立时间、处理器类型、顺便得到操作系统位数等
  • screen中conda激活环境后登录jupyter notebook导入包提示找不到,但是在命令行中就可以导入包
  • 基于SSM的中小型企业财务管理设计与实现
  • 工厂模式之简单工厂模式(常用)
  • Kafka入门教程与详解(一)
  • GoFrame学习随便记1
  • 最新自动定位版本付费进群系统源码
  • freeswitch的一个性能问题
  • 各机构如何加强网络渗透、“渗透”防御
  • Docker命令 常用中间件运维部署,方便构建自己服务
  • Android——gradle构建知识片-散装版
  • 3.3 Windows驱动开发:内核MDL读写进程内存
  • 开源与闭源:驾驭大模型未来的关键决断
  • 面向对象成员之属性
  • 第六十二周周报
  • 【机器学习】 特征工程:特征预处理,归一化、标准化、处理缺失值
  • 【深度学习实验】网络优化与正则化(七):超参数优化方法——网格搜索、随机搜索、贝叶斯优化、动态资源分配、神经架构搜索
  • 简单漂亮的首页
  • SSM项目初始化流程与操作概念解释-SpringBoot简化版
  • Angular 路由无缝导航的实现与应用(六)
  • quickapp_快应用_tabBar
  • PCL_点云分割_基于法线微分分割
  • 计算机毕业论文内容参考|基于深度学习的交通标识智能识别系统的设计与维护
  • SELinux零知识学习十六、SELinux策略语言之类型强制(1)
  • 轻量封装WebGPU渲染系统示例<34>-数据驱动之Json构建场景