三分钟搞定Redis事务场景

举报
程序员飞鸟 发表于 2022/08/22 20:09:36 2022/08/22
5.7k+ 0 0
【摘要】 事务==Redis单条命令式保存原子性的,但是事务不保证原子性==redis事务本质:一组命令的集合!一个事务中的所有命令都会被序列化,在事务执行过程的中,会按照顺序执行!一次性、顺序性、排他性、执行一些列的命令队列 set set set 执行redis事务没有隔离级别的概念想念!所有的命令在事务中,并没有直接被执行!只有发起执行命令的时候才执行!redis的事务:开启事务(multi)...

事务

==Redis单条命令式保存原子性的,但是事务不保证原子性==

redis事务本质:一组命令的集合!一个事务中的所有命令都会被序列化,在事务执行过程的中,会按照顺序执行!

一次性、顺序性、排他性、执行一些列的命令

队列 set set set 执行

redis事务没有隔离级别的概念想念!

所有的命令在事务中,并没有直接被执行!只有发起执行命令的时候才执行!

redis的事务:

  • 开启事务(multi)
  • 命令入队()
  • 执行事务(exec)

正常执行事务!

清空命令:flushdb,clear

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> get k2
QUEUED
#执行事务
127.0.0.1:6379> exec
1) OK
2) OK
3) "v1"
4) "v2"

放弃事务

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> set k4 v4
QUEUED
127.0.0.1:6379> DISCARD #取消事务
OK
127.0.0.1:6379> GET K4
(nil)

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

127.0.0.1:6379> set k1 v2
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> getset k2 #错误的命令
(error) ERR wrong number of arguments for 'getset' command
127.0.0.1:6379> set k4 v4
OK
127.0.0.1:6379> set k5 v5
OK
127.0.0.1:6379> exec   #执行事务出错 
(error) ERR EXEC without MULTI

运行时异常(1/0),如果事务队列中存在语法性,那么执行命令的时候,其他的命令是可以正常执行的,错误命令抛出异常

127.0.0.1:6379> set k1 "v1"
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> incr k1  #执行失败
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> set k3 v3
QUEUED
127.0.0.1:6379> get k3
QUEUED
127.0.0.1:6379> exec
1) (error) ERR value is not an integer or out of range#执行第一条报错,但依旧执行剩下的正确命令
2) OK
3) OK
4) "v3"
127.0.0.1:6379> get k2
"v2"
127.0.0.1:6379> get k3
"v3"
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

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

    全部回复

    上滑加载中

    设置昵称

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

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

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