一.命令支持

1.multi
开始事务

2.exec
事务提交

3.取消事务
discard

二.事务示例

1.示例

redis>set key1 20
OK
redis>mutil
OK
redis>get key1
QUEUED
redis>incr key1
QUEUED
redis>exec
1)"20"
2)(integer)"21"

2.redis中的事务算是非常简单的,它将一组命令放入队列;即便要取值,也会将该命令放入队列.等到exec时候,再用for循环,将命令全部写入,如果其中一条命令执行错误,则放弃全部命令的写入.

三.并发控制(乐观锁)

设想一个场景,client1拿到了key1后,做了一系列其他操作,在此期间client2对key1加1;client1最后也对key1加1;理论上应该是key1加2,但实际上key1只是加了1;这就是并发产生的问题,redis提供了基于watch命令的乐观锁来防止这一问题产生.

1.基本命令
a.watch key1 ... keyN
监控某个key

b.unwatch
取消监控

*watch必须和mutil...exec配合使用,单独使用并不起作用.watch监控一个key,之后mutil...exec执行一组语句,如果在此期间,有另一个client更改了watch监控的key对应的值,则exec执行返回nil,整组命令不会提交.

2.示例

A.client1

a.redis>watch key1
b.redis>multi
c.redis>incr key1
d.redis>exec

B.client2
在client1执行到c这一步时,client2也执行incr key1;client1执行exec时,发现watch的key1有改变,则放弃整个事务写入,返回nil

最新文章

  1. Toad各版本所包含的组件
  2. 解决:j-link V8下载器灯不亮,无法正常烧写固件
  3. rabbitmq消息队列——"工作队列"
  4. R语言-GA算法脚本
  5. 20145320《Java程序设计》第4周学习总结
  6. LinkedList的实现源码分析
  7. C#条件编译,发布多平台和多种选择性的项目
  8. Android Gradle manifestPlaceholders 占位符详解
  9. insert时报Cannot add or update a child row: a foreign key constraint fails (`yanchangzichan`.`productstatusrecord`, CONSTRAINT `p_cu` FOREIGN KEY (`cid`) REFERENCES `customer` (`cid`))错误
  10. Java集合源码分析(三)Vevtor和Stack
  11. java.util.concurrent包下并发锁的特点与适用场景
  12. 低版本的Chrome,打开url时,报错,IE确可以打开;
  13. Golang的防坑小技巧
  14. Swift udp实现根据端口号监听广播数据(利用GCDAsyncUdpSocket实现)
  15. ribbon的注解使用报错--No instances available for [IP]
  16. hive中解决中文乱码
  17. 第一次项目上Linux服务器(四:CentOS6下Mysql数据库的安装与配置(转))
  18. Zookeeper 通知更新可靠吗? 解读源码找答案!
  19. android studio svn 创建分支
  20. 【springMVC 后台跳转前台】1.使用ajax访问的后台,后台正常执行,返回数据,但是不能进入前台的ajax回调函数中 ----2.前后台都没有报错,不能进入ajax回调函数

热门文章

  1. Java中Collections的frequency方法
  2. C语言fopen函数了解
  3. ClientScript.RegisterClientScriptBlock 不执行
  4. JS 问题整理 (1)
  5. input 限制输入字段总结
  6. VS2010安装包制作
  7. FZU-2268 Cutting Game(二进制使用)
  8. 多层代理获取用户真实IP
  9. ORACLE查询当前连接的用户信息及操作的SQL语句
  10. DQL数据查询语言