网站注册局,德国网站的后缀名,中铁建设集团有限公司招投标平台,郑州短视频培训机构这里写目录标题 第一章、redis事务和watch机制1.1#xff09;redis事务#xff0c;事务的三大命令语法#xff1a;开启事务 multi语法#xff1a;执行事务 exec语法#xff1a;取消事务 discard 1.2#xff09;redis事务的错误和回滚的情况1.3#xff09;watch机制语法redis事务事务的三大命令语法开启事务 multi语法执行事务 exec语法取消事务 discard 1.2redis事务的错误和回滚的情况1.3watch机制语法watch key [key ...]语法unwatch 第一章、redis事务和watch机制
1.1redis事务事务的三大命令
什么是redis事务 Redis 中的事务transaction是一个单独隔离的操作保证两个或两个以上的命令集合按需排队并顺序执行中间不会被任何其他操作打断。 redis事务其实是指运用事务的思想实现一组集合命令的执行没有回滚的概念严格意义上没有事务。 ①multi - setAutoCommoitfalse-事务开启
语法开启事务 multi
作用标记一个事务的开始。通过multi后续的命令都会按照先后顺序被放进一个队列当中。当用户键入exec后这些指令都会按顺序执行。 返回值总是返回 ok ②exec -执行
语法执行事务 exec
作用执行所有事务块内的命令 返回值事务内的所有执行语句内容事务被打断影响返回 nil
③discard -取消
语法取消事务 discard
作用取消事务如果开启multi后输入若干命令再键入discard则之前的命令令通通取消执行。 返回值总是返回 ok
# 开启事务
127.0.0.1:6379 MULTI
OK
# 输入两个或者两个以上命令
127.0.0.1:6379(TX) set k1 v1
QUEUED
127.0.0.1:6379(TX) set k2 v2
QUEUED
# 执行命令
127.0.0.1:6379(TX) EXEC
1) OK
2) OK
127.0.0.1:6379 keys *
1) k1
2) k2
1.2redis事务的错误和回滚的情况
①组队时出错错误对于redis来说是已知的事务中的所有指令都会失效。
127.0.0.1:6379 MULTI
OK
127.0.0.1:6379(TX) set k1 v1
QUEUED
127.0.0.1:6379(TX) set k2 v2
QUEUED
127.0.0.1:6379(TX) set k33
(error) ERR wrong number of arguments for set command
127.0.0.1:6379(TX) set k4 v4
QUEUED
127.0.0.1:6379(TX) exec
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379 keys *
(empty array)②运行时出错:因为错误是未知的所以redis必须执行时才能知道错误而redis无错误回滚机制会继续执行后续指令并有效。
127.0.0.1:6379 MULTI
OK
127.0.0.1:6379(TX) set k1 v1
QUEUED
127.0.0.1:6379(TX) INCR k1
QUEUED
127.0.0.1:6379(TX) set k2 v2
QUEUED
127.0.0.1:6379(TX) EXEC
1) OK
2) (error) ERR value is not an integer or out of range
3) OK
127.0.0.1:6379 keys *
1) k1
2) k2
127.0.0.1:6379
1.3watch机制
①watch 监视某个或者某几个key的值如果有 key 的 value 值在事务 EXEC 执行之前被修改了那么事务将被打断。 返回值总是返回 ok
语法watch key [key …]
②取消 WATCH 命令对所有 key 的监视。如果在执行 WATCH 命令之后 EXEC 命令或 DISCARD 命令先被执行了的话那么就不需要再执行 UNWATCH 了 返回值总是返回 ok
语法unwatch
③例子 启动服务器redis-server , 再开启两个客户端连接。 分别叫 A 客户端 红色和 B 客户端黄色。 1在 A 客户端设置 key : str.lp 登录人数为 10 2在 A 客户端监视 key : str.lp 3在 A 客户端开启事务 multi 4在 A 客户端修改 str.lp 的值为 11 5在 B 客户端修改 str.lp 的值为 15 6在 A 客户端执行事务 exec 7在 A 客户端查看 str.lp 值A 客户端执行的事务没有提交因为 WATCH 的 str.lp 的值已经被修改了 所以放弃了事务。