redis事务

举报
IT 叶新东老师 发表于 2021/12/22 00:34:34 2021/12/22
【摘要】 redis事务的特性 不同的客户端之间的事务不会互相阻碍;事务是一个原子操作,要么全部执行,要么全部都不执行,没有中间状态;redis的事务不支持回滚;作者认为,程序失败是由编程错误造成的,而这些错误应...

redis事务的特性

  • 不同的客户端之间的事务不会互相阻碍;
  • 事务是一个原子操作,要么全部执行,要么全部都不执行,没有中间状态;
  • redis的事务不支持回滚;作者认为,程序失败是由编程错误造成的,而这些错误应该在开发的时候就被发现;还有一点是redis不支持事务可以保证简单且快速;所以,在未提交的情况,不会更新key值!

在这里插入图片描述

redis事务和mysql事务的区别

  1. redis的事务没有mysql的事务那么完整;

  2. mysql的事务是为了保证最终一致性的,所以在修改数据时会加锁;

  3. redis因为是单进程的,它为了保证速度,不会加锁,谁最后提交就以谁为主;最先提交的那个会被最后提交的覆盖掉;
    在这里插入图片描述

使用

# 开启事务
multi

# 在开启事务和提交事务中间的代码都会进入到redis 的队列里面;当你执行exec提交后,redis会将队列里面的名字依次执行;
# 事务操作命令...

# 提交事务
exec

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

redis事务的执行原理

redis事务的本质其实是将命令存储在一个队列里面,当执行exec命令提交后按依次执行队列中的命令

127.0.0.1:6379> MULTI   // 开启事务
OK
127.0.0.1:6379> set key1 hello  
QUEUED    # 第一个命令加入到了队列中
127.0.0.1:6379> keys *
QUEUED   # 第二个命令加入到了队列中
127.0.0.1:6379> exec  // 提交
1) OK              # 第一个命令的执行结果
2) 1) "sumkey1"    # 第二个命令的执行结果
   2) "key1"
   3) "k2"
   4) "sumkey"
   5) "sumkey2"
   6) "k1"

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在这里插入图片描述

wathc命令实现乐观锁

WATCH 命令可以为 Redis 事务提供 check-and-set (CAS)行为。

被 WATCH 的键会被监视,并会发觉这些键是否被改动过了。 如果有至少一个被监视的键在 EXEC 执行之前被修改了, 那么整个事务都会被取消, EXEC 返回nil-reply来表示事务已经失败。

watch k1 # 开启监听

multi # 开启事务

get k1  # 第一个命令

keys *  # 第二个命令

exec # 提交,在提交之前,如果有其他的客户端修改了k1的值,那么这个事务就会失效;执行exec后会返回`(nil)`表示事务失败了;

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

文章来源: yexindong.blog.csdn.net,作者:java叶新东老师,版权归原作者所有,如需转载,请联系作者。

原文链接:yexindong.blog.csdn.net/article/details/120648521

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。