Redis之事务

官方介绍

在这里插入图片描述简而言之就是可以一次执行多个命令,本质是一组命令的集合,一个事务中的所有命令都会序列化,按顺序的串行化执行而不会被其它命令插入,不允许加塞;

Redis事务的作用

一个队列中,一次性,顺序性、排他性的执行一系列命令;

常用命令

multi标记一个事务的开始,执行完此命令后,后续的操作,都会放入到队列中统一执行:

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED

exec执行所有事务块内的命令:

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> get k1
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
3) "v1"

discard取消事务,放弃执行事务块内的命令:

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k1 1
QUEUED
127.0.0.1:6379> set k2 2
QUEUED
127.0.0.1:6379> discard
OK
127.0.0.1:6379> get k1
"v1"

watch监控一个或者多个key,如果在事务提交之前,这些被监控的key被其它命令所改动,那么事务将会被打断,
例如我们监控一个key为balance的数据,然后开启事务,再设置值:

127.0.0.1:6379> watch balance
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set balance 100
QUEUED

此时我们在开一个窗口,设置balance的值:

127.0.0.1:6379> get balance
"120"
127.0.0.1:6379> get balance
"120"
127.0.0.1:6379> set balance 99
OK

然后再回到第一个窗口,提交事务,发现执行失败,也就是watch指令监控的key,如果在提交事务时发现被其它客户端修改了,那么整个队列的指令都不会执行:

127.0.0.1:6379> exec
(nil)

此时我们获取balance的值,可以看到没有改变:

127.0.0.1:6379> get balance
"99"

unwatch取消对所有key的监控,注意此命令是解除所有被监控的key,无法指定单独某一个key:

127.0.0.1:6379> watch balance
OK
127.0.0.1:6379> unwatch
OK

特性介绍

  • 没有隔离级别的概念,队列中的命令没有提交之前都不会实际的执行,因为事务提交之前任何指令都不会被实际执行,也就不存在事务内的查询要看到事务内的更新,在事务外查询不能看到的问题;
  • 不保证原子性,Redis同一个事务中如果有一条命令执行失败,其余的命令仍然会被执行,不会有回滚
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值