三分钟搞定Redis事务场景
【摘要】 事务==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)