Redis手记之事务

1.事务

redis的事务是一个或者多个redis命令组成的批处理,当这多个命令中出现一条命令执行失败的时候,其他的命令依旧会照样执行,redis的事务并不具有原子性。当一个redis事务在执行的时候,新进来的redis命令不会插入到redis。

事务涉及到的redis命令如下:multi exec watch unwatch

命令说明demo
watch监视一个或者多个key,从而来管理事务,如果在事务执行之前,这些key发生了变动,那么事务将被打断127.0.0.1:6379> watch flagkey
OK
multi开始一个事务127.0.0.1:6379> multi
OK
exec执行事务

127.0.0.1:6379> set username smallking
QUEUED
127.0.0.1:6379> set password hahaha
QUEUED
127.0.0.1:6379> sadd list 1 2 3
QUEUED
127.0.0.1:6379> exec

 

watch和事务的关系和顺序如下:

 

              

watch可以用来当作并发的乐观锁。很多地方都有应用。例如用watch做个商品秒杀,伪代码可以写成这样子:

jedis.watch(key); // key可以是商品数量
Transaction transaction = jedis.multi();// 标记一个事务块的开始
transaction.set(key, String.valueOf(prdNum - 1));
List<Object> result = transaction.exec();// 执行事务 成功的话会有返回值
if (result == null || result.isEmpty()) {
	// watch-key被其他线程修改 再执行一遍抢的逻辑,知道key的数量 == 0
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值