• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Y-wee
博客园    首页    新随笔    联系   管理     

redis事务的基本操作

redis事务的基本操作

Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行;事务在执行的过程中,不会被其他客户端发送来的命令请求所打断

Redis事务的主要作用就是串联多个命令防止别的命令插队,没有隔离级别概念;Redis单条命令是有原子性的,但是事务不保证原子性

redis的事务操作:

  • 开启事务:multi
  • 命令入队
  • 执行事务|放弃事务:exec|discard

从输入Multi命令开始,输入的命令都会依次进入命令队列中,但不会执行,直到输入Exec后,Redis会将之前的命令队列中的命令依次执行

实战

# 开启事务
127.0.0.1:6379> multi 
OK
# 命令入队
127.0.0.1:6379(TX)> set key1 value1 
QUEUED
127.0.0.1:6379(TX)> set key2 value2 
QUEUED
127.0.0.1:6379(TX)> get key1
QUEUED
# 执行事务
127.0.0.1:6379(TX)> exec 
1) OK
2) OK
3) "value1"

放弃事务:事务中的命令都不会被执行

# 开启事务
127.0.0.1:6379> multi 
OK
# 命令入队
127.0.0.1:6379(TX)> set key1 value1 
QUEUED
127.0.0.1:6379(TX)> set key2 value2
QUEUED
# 放弃事务
127.0.0.1:6379(TX)> DISCARD 
OK
# 事务没有被执行,拿不到key1的值
127.0.0.1:6379> get key1 
(nil)

事务执行发生编译型异常(代码有问题,命令有错),事务中所有命令都不会被执行

# 开启事务
127.0.0.1:6379> multi 
OK
# 命令入队
127.0.0.1:6379(TX)> set key1 value1 
QUEUED
127.0.0.1:6379(TX)> set key2 value2
QUEUED
# 命令错误,编译型异常
127.0.0.1:6379(TX)> getset key1 
(error) ERR wrong number of arguments for 'getset' command
127.0.0.1:6379(TX)> set key3 value3
QUEUED
# 执行事务失败
127.0.0.1:6379(TX)> exec 
(error) EXECABORT Transaction discarded because of previous errors.
# 事务中的命令没有执行
127.0.0.1:6379> get key1 
(nil)

事务执行发生运行时异常(1/0),那么执行命令的时候,其他命令是可以正常执行的,错误命令抛出异常

127.0.0.1:6379> set key1 "hello" 
OK
# 开启事务
127.0.0.1:6379> multi 
OK
127.0.0.1:6379(TX)> incr key1 
QUEUED
127.0.0.1:6379(TX)> set key2 value2
QUEUED
127.0.0.1:6379(TX)> set key3 value3
QUEUED
127.0.0.1:6379(TX)> get key3
QUEUED
# 执行事务
127.0.0.1:6379(TX)> exec 
1) (error) ERR value is not an integer or out of range 
2) OK 
3) OK
4) "value3"
127.0.0.1:6379> get key2 
"value2"
记得快乐
posted @ 2021-03-20 15:03  Y-wee  阅读(45)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3