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