Redis事务
来源:互联网 发布:顾家 知乎 编辑:程序博客网 时间:2024/05/17 03:41
对于redis中的事务,需要用multi和exec来提交一个事务:
root@wsdc-server:~/Downloads/redis-3.0.0-rc1/src# ./redis-cli -p 6379127.0.0.1:6379> multi // 标示事务的开始OK127.0.0.1:6379> set "name" "practical common lisp" // 事务命令入队QUEUED127.0.0.1:6379> get "name"QUEUED127.0.0.1:6379> set "author" "Peter Seibel"QUEUED127.0.0.1:6379> get "author"QUEUED127.0.0.1:6379> exec // 当事务入队之后,遇到了 exec, discard, watch, multi 四个命令中的任何一个,就会立即执行该命令1) OK2) "practical common lisp"3) OK4) "Peter Seibel"
对于watch命令,它是一个乐观锁(optimistic locking),它可以再exec执行之前,监视任意数量的数据库键,并在exec命令执行时,检查被监视的键是否至少有一个已经被修改过了,如果是的话,服务器将拒绝执行事务,并向客户端返回事务执行失败的空回复。下面举例:时间客户端A客户端BT1WATCH "name" T2MULTI T3SET "name" "peter" T4 SET "name" "john"T5EXEC
在该例子中,客户端A一开始就监视了name这一个键。发现在A在执行事务的过程中,B去修改了该值,所以会引发事务失败。
watch的触发:
所有对数据库进行修改的命令,比如 set, lpush, sadd, zrem, del, flushdb 等都可以触发watch。这些命令在执行之后,都会调用multi.c/touchWatchKey函数,对watched_keys字典进行检查,查看是否有客户端正在监视刚刚被命令修改过的数据库键,如果有的话,那么touchWatchKey函数就会将监视被修改的客户端的REDIS_DIRTY_CAS标识打开,标识该客户端的事务安全性已经被破坏。
0 0
- Redis 事务
- redis事务
- Redis 事务
- redis--事务
- redis事务
- redis事务
- Redis事务
- redis 事务
- Redis事务
- Redis事务
- Redis 事务
- Redis 事务
- redis事务
- Redis 事务
- Redis 事务
- redis 事务
- redis事务
- Redis 事务
- innerHTML和html联系和区别
- ZIP压缩算法详细分析及解压实例解释
- python 2.7.x 和 3.x 版本区别
- vijos1070_关于次小生成树的求法
- CSS:class选择器的使用
- Redis事务
- 使用charles proxy for Mac来抓取手机App的网络包
- 编译bluez-5.25 遇到的错误及解决方法
- asp.net中Session小例子
- AndroidManifest.xml中的<uses-feature/>以及和<uses-permission/>之间的联系
- HDOJ 5128 The E-pang Palace 暴力枚举+计算几何
- 学习Unity3D第十五天之继承。
- 创建索引
- 系统设计名词解释