redis 如何使用事物

介绍

Redis的事务本质就是一组命令的集合,可以一次性支持执行多个指令。串行执行,从上到下依次执行

Redis 事物特点

  • Redis事务没有隔离性的概念。
    所有的命令在事务真正执行之前不进行任何操作,只是在队列缓存中,可执行可撤销
  • Redis不保证原子性
    Redis的单条命令一定是原子性的,但是事务中,如果其中一个命令执行失败,其与的命令依旧执行

语法格式

# 开启一个事务
# 一堆指令
# 执行这个事务
 
multi   # 标记事务的开始
...     # 指令集
exec    # 执行事务
discard # 放弃事务,取消这个事务

验证

  • 成功执行
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> keys *
QUEUED
127.0.0.1:6379> EXEC
OK
OK
v1
k2
k1
127.0.0.1:6379> 
  • 事物取消
127.0.0.1:6379> MULTI  # 开启事物
OK
127.0.0.1:6379> set a1 b1
QUEUED
127.0.0.1:6379> set a2 b2
QUEUED
127.0.0.1:6379> get a2
QUEUED
127.0.0.1:6379> keys *
QUEUED
127.0.0.1:6379> DISCARD # 取消事物
OK
127.0.0.1:6379> get a2

127.0.0.1:6379> keys *

127.0.0.1:6379> 

编译型错误(不会执行)

127.0.0.1:6379> 
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set k1 v1 
QUEUED
127.0.0.1:6379> getset k8  # k8 不存在,获取报错,类似java 编译错误
ERR wrong number of arguments for 'getset' command

127.0.0.1:6379> get k1
QUEUED
127.0.0.1:6379> EXEC
EXECABORT Transaction discarded because of previous errors.

127.0.0.1:6379> 

出现错误,执行失败

运行时错误

127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> INCR k1  # k1 是字符串类型,无法进行加运算
QUEUED
127.0.0.1:6379> set k2 v2 
QUEUED
127.0.0.1:6379> get k2 
QUEUED
127.0.0.1:6379> keys *
QUEUED
127.0.0.1:6379> EXEC
ERR value is not an integer or out of range

OK
v2
k2
k1
127.0.0.1:6379> 

虽然有语法错误,仍会继续执行

总结

  • reids 事物是一组命令的集和,从上向下依次执行
  • 开启事物最终执行(exec)前,先入队列,不真正去执行
  • 事物执行前可撤销
  • 事物不保证原子性
  • 只有出现语法错误事物执行失败
  • 部分非语法性错误,部分失败,不影响整体执行
  • redis 没有回滚机制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值