网站上添加子栏目,上海最正规的人才市场,广东省建筑工程信息网,湖南学校网站建设redis悲观锁
Redis加锁命令分有INCR、SETNX、SET 一、INCR锁 key不存在时#xff0c;key的值会先被初始化为0#xff0c;其它用户在执行INCR操作进行加一#xff0c; 如果返回的数大于1#xff0c;说明这个锁正在被使用当中#xff0c;通常用在同时只能有一个人可以操作某…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;//初始值 value1jedis.set(watchKeys, 1);//监听key为watchKeys的值jedis.watch(watchkeys);//开启事务Transaction tx jedis.multi();//watchKeys自增加一tx.incr(watchKeys);//执行事务如果其他线程对watchKeys中的value进行修改则该事务将不会执行//通过redis事务以及watch命令实现乐观锁ListObject exec tx.exec();if (exec null) {System.out.println(事务未执行);} else {System.out.println(事务成功执行watchKeys的value成功修改);}
}