Redis事务

什么是事务

redis事务就是一个命令执行的队列,将一系列预定义命令包装成一个队列,当执行时,一次性按照添加顺序依次执行,中间不会被打断或者干扰

特性

  • 一次性
  • 顺序性
  • 排他性

基本操作

#开启事务,此指令执行后,后续的所有指令均加入事务中
mutli

命令1
命令2
...

#执行事务,事务的结束位置,同时也是执行事务,与multi成对出现
exec

#取消事务,终止当前事务定义,发生再multi之前,exec之前
discard

注意事项

  • 编译型错误,事务中所有的命令都不会被执行
 set name   ×
 正确的格式是,上面缺少个value:
 set key value  √
  • 运行时异常,再执行命令的时候,正确的命令可以正常执行,错误的命令抛出异常

    set count num  #设置一个值
    
    multi # 开启事务
    
    incr count #第一条,不能对字符串类型进行自增,错误的语句
    
    set name lixuan #第二条,正确
    
    get name  #第三条,正确
    
    exec # 执行事务
    1) (error) ERR value is not an integer or out of range  # 虽然第一条命令报错了,但是 依旧正常执行成功了! 
    2) OK 
    3) lixuan
    

如果遇到事务出错,只能用人工的方式,根据之前的记录,用set替换掉,redis不支持事务回滚

### Redis 事务机制概述 Redis 使用 `MULTI`、`EXEC`、`DISCARD` 和 `WATCH` 命令来实现事务功能[^2]。这些命令使得一组命令可以作为一个整体被执行,确保它们要么全部成功执行,要么都不执行。 #### 事务特点 - **原子性**:虽然 Redis事务不提供严格的 ACID 中的原子性,但在执行过程中,所有命令会按照顺序依次执行,不会被打断。 - **一致性**:当命令语法错误、命令执行错误或 Redis 发生意外故障时,Redis 事务机制能够保证数据的一致性[^3]。 - **隔离性**:事务中的所有命令会被序列化并按顺序执行,在整个过程里不会受到其他客户端的影响[^4]。 #### 主要命令解释 - **MULTI**:标记一个事务块的开始。之后所有的命令都将被放入队列中等待执行。 - **EXEC**:触发之前排队的所有命令一次性执行,并返回各个命令的结果列表。 - **DISCARD**:取消当前事务,清空已经入队但是还未执行的命令。 - **WATCH**:监视键的变化情况;如果在 WATCH 后有任何修改,则 EXEC 执行失败,以此支持乐观锁的功能[^1]。 #### 错误处理与回滚特性 需要注意的是,即使某个命令在事务内发生了运行期错误(比如除零),这并不会导致整个事务自动回滚——只有那些确实能完成的操作才会生效,而无法继续下去的部分则停止尝试。因此开发者应该自行设计合理的逻辑去应对可能出现的问题。 ```bash # 开始一个新的事务 MULTI # 将几个命令加入到事务队列中 SET key1 "value" INCR key2 LPUSH mylist "item" # 提交事务 EXEC ``` 对于更复杂的业务需求来说,还可以利用 Lua 脚本来编写更加紧凑高效的程序片段来进行批量操作,从而达到类似的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值