Redis事务

什么事数据库事务?

一次在跟数据库的会话当中, 所有执行的sql要么一起成功,要么一起失败。

数据库事务4大特性

ACID:

原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)

单次操作,执行一组命令,需要创建与其相关联的命令

如:MULTI,EXEC,DISCARD,WATCH开启处理Redis事务

假如我有3个命令需要一起执行

该命令 HSET user:001 id 11 uname li4 在 Redis 中执行了两个操作:

  1. 它尝试在键名为 user:001 的哈希表中设置字段 id 的值为 11。
  2. 它尝试设置字段 uname 的值为 li4。

理解这个命令的关键在于知道 Redis 的哈希表结构允许你将多个键值对存储在一个名为 key 的内部结构中。在这个例子中,user:001 是哈希表的名称,可以看作是一个用户对象,其中 id 和 uname 是该用户对象的两个属性。

然而,这个命令实际上是不正确的。在 Redis 的标准 HSET 用法中,你需要为每个字段和值对提供单独的参数,如下所示:

HSET user:001 id 11
HSET user:001 uname li4

或者,你可以一次性设置多个字段,如:

HSET user:001 id 11 uname li4

这样,哈希表 user:001 将包含两个字段:id 和 uname,它们的值分别是 11 和 li4。

如果你正是想以这种方式设置多个字段,那么应该确保命令语法正确。如果你使用的是 Redis 的最新版本,上面提供的一次性设置多个字段的命令将正常工作。如果你使用的是 Redis 的早期版本,你可能需要分两次执行 HSET 命令,每次设置一个字段。

redis事务和数据库事务区别

MULTI 开启事务 会回ok

案例演示

事务提交

事务放弃

此时k2 还是v2不是v22

如果在事务中发生错误

1.在还没执行exec之前,任何一个命令有语法错误,所有的命令都不会被执行

2.执行后发生异常,异常的执行失败,其他命令执行成功。

email自增操作肯定不对

其他命令正常执行,k1为新值

Watch监控

类似于JUC的CAS

balance是银行余额

开启监控,如果没有人来抢,正常执行,在事务中balance从100成功修改为110。

举例

此时balance是110,开启了监控,此时我想把balance设置为200,但是此时有人比我先行一步

其他客户端操作了balance

回到刚才客户端 可以set balance 200成功,但是提交事务的时候就会返回空。

事务执行失败,全部命令执行不成功

全部命令执行不成功。【因为服务器的版本更新了】

unwatch命令 放弃监控

小细节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值