java中的应用:
//一个新的Redis连接,如果请求的话支持事务
redisTemplate.setEnableTransactionSupport(true);
//需要监视的key
redisTemplate.watch(redisKey);
//开启事务
redisTemplate.multi();
/**
* 需要放在事务中的逻辑代码
* do somthing
*/
//提交事务
redisTemplate.exec()
//刷新事务的所有以前监视的键。如果调用EXEC或DISCARD,则无需手动调用UNWATCH
redisTemplate.unwatch();
//关闭请求支持事务
redisTemplate.setEnableTransactionSupport(false);
注意事项:
- 查询操作应放在开启事务之前watch之后。因为multi就是一个汇总提交的操作,在事务过程中查询是不会被提交,也就得不到查询的数据,无法参与事物中其他需要该数据的逻辑。而watch之后该key对应的值才会被锁定,否则在watch之前的读取到的值还是会被修改的,会造成开启事物后的该值与之前获取的值不一致的问题。