redis命令详解与使用场景举例——Transaction(事务)
来源:互联网 发布:更改windows系统语言 编辑:程序博客网 时间:2024/06/13 02:14
DISCARD
取消事务,放弃执行事务块内的所有命令。
如果正在使用 WATCH 命令监视某个(或某些) key,那么取消所有监视,等同于执行命令 UNWATCH 。
可用版本:
2.0.0+
时间复杂度:
O(1)。
返回值:
总是返回 OK 。
redis> MULTIOKredis> PINGQUEUEDredis> SET greeting "hello"QUEUEDredis> DISCARDOK
EXEC
执行所有事务块内的命令。
假如某个(或某些) key 正处于 WATCH 命令的监视之下,且事务块中有和这个(或这些) key 相关的命令,那么 EXEC 命令只在这个(或这些) key 没有被其他命令所改动的情况下执行并生效,否则该事务被打断(abort)。
可用版本:
1.2.0+
时间复杂度:
事务块内所有命令的时间复杂度的总和。
返回值:
事务块内所有命令的返回值,按命令执行的先后顺序排列。
当操作被打断时,返回空值 nil 。
事务被成功执行
redis> MULTIOKredis> INCR user_idQUEUEDredis> INCR user_idQUEUEDredis> INCR user_idQUEUEDredis> PINGQUEUEDredis> EXEC1) (integer) 12) (integer) 23) (integer) 34) PONG
监视 key ,且事务成功执行
redis> WATCH lock lock_timesOKredis> MULTIOKredis> SET lock "huangz"QUEUEDredis> INCR lock_timesQUEUEDredis> EXEC1) OK2) (integer) 1
监视 key ,且事务被打断
redis> WATCH lock lock_timesOKredis> MULTIOKredis> SET lock "joe" # 就在这时,另一个客户端修改了 lock_times 的值,concurrentModifyedQUEUEDredis> INCR lock_timesQUEUEDredis> EXEC # 因为 lock_times 被修改, joe 的事务执行失败(nil)
MULTI
标记一个事务块的开始。
事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行。
可用版本:
1.2.0+
时间复杂度:
O(1)。
返回值:
总是返回 OK 。
redis> MULTI # 标记事务开始OKredis> INCR user_id # 多条命令按顺序入队QUEUEDredis> INCR user_idQUEUEDredis> INCR user_idQUEUEDredis> PINGQUEUEDredis> EXEC # 执行1) (integer) 12) (integer) 23) (integer) 34) PONG
UNWATCH
取消 WATCH 命令对所有 key 的监视。
如果在执行 WATCH 命令之后, EXEC 命令或 DISCARD 命令先被执行了的话,那么就不需要再执行 UNWATCH 了。
因为 EXEC 命令会执行事务,因此 WATCH 命令的效果已经产生了;而 DISCARD 命令在取消事务的同时也会取消所有对 key 的监视,因此这两个命令执行之后,就没有必要执行 UNWATCH 了。
可用版本:
2.2.0+
时间复杂度:
O(1)
返回值:
总是 OK 。
redis> WATCH lock lock_timesOKredis> UNWATCHOK
WATCH key [key …]
监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
可用版本:
2.2.0+
时间复杂度:
O(1)。
返回值:
总是返回 OK 。
redis> WATCH lock lock_times
OK
- redis命令详解与使用场景举例——Transaction(事务)
- redis命令详解与使用场景举例——key
- redis命令详解与使用场景举例——String
- redis命令详解与使用场景举例——Hash
- redis命令详解与使用场景举例——List
- redis命令详解与使用场景举例——Pub与Sub(发布订阅)
- redis命令详解与使用场景举例——Set(集合)
- redis命令详解与使用场景举例——SortedSet(有序集合)
- redis命令详解与使用场景举例——Script(脚本)
- redis命令详解与使用场景举例——Connection(连接)
- redis命令详解与使用场景举例——Server(服务器)
- redis的事务(transaction)详解
- Redis命令学习-Transaction(事务)
- NoSQL之Redis---事务(transaction)命令
- redis中事务(Transaction)的使用
- Redis使用场景详解
- lua+redis业务场景举例——队列中的应用
- Redis事务(transaction)
- jsp学习
- linux adb无法连接device
- 关于Python的进程线程协程之thread模块
- 移植leveldb到hi3519
- 关于Vector和Map查找效率的惊人的实际测试结果
- redis命令详解与使用场景举例——Transaction(事务)
- JavaScript 学习随笔(一)
- 如何做一个侧滑菜单
- 收集了RxJava常见的使用场景,例子简洁、经典、易懂...
- C++中用new和不用new定义类的对象的区别解答
- 首次在Linux中安装Locust过程总结
- MyBatis学习笔记(一)——配置文件中的别名以及mapper中的namespace
- 转:Solr学习总结-Facet(各种例子,包括facet.query的使用)
- 工作项目问题总结--websocket,string,stringbuilder,stringbuffer