本文实例讲述了redis中的事务操作。分享给大家供大家参考,具体如下:
redis与mysql的事务
Redis支持简单的事务
简单使用
讲张三的100圆钱转账给lisi:
set zhangsan 800 set lisi 100 multi decrby zhangsan 100 incrby lisi 100 exec
失败的两种情况
在mutil后面的语句中, 语句出错可能有2种情况,还是以转账的情况来分析:
(1)语法就有问题
127.0.0.1:6379> multi OK 127.0.0.1:6379> decrby zhang 100 QUEUED 127.0.0.1:6379> hasdfasdf (error) ERR unknown command 'hasdfasdf' 127.0.0.1:6379> exec (error) EXECABORT Transaction discarded because of previous errors. 127.0.0.1:6379> mget zhang wang 1) "800" 2) "100"
这种,exec时,报错, 所有语句得不到执行,所以还是800和100圆
(2)语法本身没错,但适用对象有问题
127.0.0.1:6379> multi OK 127.0.0.1:6379> decrby zhang 100 QUEUED 127.0.0.1:6379> sadd wang 1 QUEUED 127.0.0.1:6379> exec 1) (integer) 700 2) (error) WRONGTYPE Operation against a key holding the wrong kind of value 127.0.0.1:6379> mget zhang wang 1) "700" 2) "100"
Exec之后,会执行正确的语句,并跳过有不适当的语句,所以这里是一个700圆一个100圆了
案例
假设买票案例,当前只有1张票和100块钱,如果我在买票的过程中,在我multi之后,和exec之前,票被别人买了—即ticket已经变成0了,然后我们执行exec的时候就会将票变为-1,这就不对了。
127.0.0.1:6379> set ticket 1 OK 127.0.0.1:6379> set money 100 OK 127.0.0.1:6379> multi OK 127.0.0.1:6379> decr ticket QUEUED 127.0.0.1:6379> decrby money 10 QUEUED 127.0.0.1:6379> exec 1) (integer) -1 2) (integer) 90
使用watch来检测票有没有被买走
实用watch
来检测指定的key,负责监测key没有被改动。
127.0.0.1:6379> set ticket 1 OK 127.0.0.1:6379> set money 100 OK 127.0.0.1:6379> watch ticket OK 127.0.0.1:6379> multi OK 127.0.0.1:6379> decr ticket QUEUED 127.0.0.1:6379> decrby money 10 QUEUED 127.0.0.1:6379> exec (nil)//返回nil,说明监视的ticket已经改变了,事务就取消了. 127.0.0.1:6379> mget ticket money 1) "0" 2) "100"
在执行exec之前,票被买走了,ticket为0了,然后执行exec后,发现ticket被动了,所以就不执行事务了,事务被取消了。在执行exec的时候返回nil
。
watch相关用法
watch key1 key2 ... keyN
作用:监听key1 key2..keyN有没有变化,如果有变, 则事务取消
unwatch
作用:取消所有watch监听
希望本文所述对大家Redis数据库程序设计有所帮助。
redis,事务操作
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 群星2013-青春缤纷辑压箱宝大公开3CD2[新加坡限量版][WAV整轨]
- 林育群.2013-BalladShow(日本版)【环球】【WAV+CUE】
- 陈加洛.1992-痛到感觉不到【宝丽金】【WAV+CUE】
- 群星.2023-宿命之敌电视剧原声带【韶愔音乐】【FLAC分轨】
- 東京事変-大発見[FLAC+CUE]
- 椎名林檎-三文ゴシップ[FLAC+CUE]
- 2024年08月04日
- 裘德《裘德「最后的水族馆」演唱会LIVE》[320K/MP3][228.89MB]
- 裘德《裘德「最后的水族馆」演唱会LIVE》[24bit 48kHz][FLAC/分轨][2.08G]
- 基因三重奏《如果你什么都不说 音乐会现场录音》[320K/MP3][145.37MB]
- 孟庭苇.1996-月亮说话(2020环球24KGOLD限量版)【上华】【WAV+CUE】
- 群星.1997-新艺宝优质音响系列·国语精选监听版【新艺宝】【WAV+CUE】
- 阿桑.2005-寂寞在唱歌(星外星引进版)【华研国际】【WAV+CUE】
- 基因三重奏《如果你什么都不说 音乐会现场录音》[FLAC/分轨][287.43MB]
- 蔡题谦《我爱你,却依然要看你走》[320K/MP3][88.65MB]