简短截说阐述redis中事务(RedisTransactions)的使用
我们知道,在关系型数据库中,比如mysql,如果要使用事务,首先向数据库服务器发送 BEGIN ,然后执行各个相互一致的写操作和读操作,最后,用户可以选择发送 COMMIT 来确认之前所做的修改,或者发送 ROLLBACK 来放弃那些修改。
同样, Redis 中也有简单的方法处理一连串相互一致的读操作和写操作。首先是以 MULTI 命令开始事务,后续跟着一连串命令,最后以 EXEC 结束事务或者以 DISCARD 命令撤销所有命令并结束事务。
但是redis事务和mysql事务最重要的一点区别是,redis事务不管指令正确或者错误,都会执行,中途遇见错误指令也会继续执行后面的指令,Redis并没有像mysql那样的事务回滚机制。mysql事务中如果执行过程中发生了错误不仅后面的sql语句不会执行,还会进行数据回滚,这是二者事务的最大区别。Redis的事务出错需要开发人员自己进行数据回滚等操作。
在翻阅了redis官方手册以后,官方对此的解释是:If you have a relational databases background, the fact that Redis commands can fail during a transaction, but still Redis will execute the rest of the transaction instead of rolling back, may look odd to you. However there are good opinions for this behavior:
Redis commands can fail only if called with a wrong syntax (and the problem is not detectable during the command queueing), or against keys holding the wrong data type: this means that in practical terms a failing command is the result of a programming errors, and a kind of error that is very likely to be detected during development, and not in production.
Redis is internally simplified and faster because it does not need the ability to roll back.
An argument against Redis point of view is that bugs happen, however it should be noted that in general the roll back does not save you from programming errors. For instance if a query increments a key by 2 instead of 1, or increments the wrong key, there is no way for a rollback mechanism to help. Given that no one can save the programmer from his or her errors, and that the kind of errors required for a Redis command to fail are unlikely to enter in production, we selected the simpler and faster approach of not supporting roll backs on errors.
大白话的意思就是:redis的作者认为,当事务的执行时,一般发生错误都是因为业务编程错误造成的,这种错误通常只会出现在开发环境中,而基本很少会在实际的生产环境中出现(因为这种业务错误都会在测试的时候消灭),所以他认为没有必要为 Redis 开发事务自动回滚功能,这和Redis追求的简单高效的设计主旨不符合。
而mysql恰恰相反,mysql认为数据库有必要也有责任处理事务中报错的情况,所以mysql有自动回滚的功能。
在redis中使用事务: liuyue:~ liuyue$ redis-cli 127.0.0.1:6379> multi OK 127.0.0.1:6379> set test 123 QUEUED 127.0.0.1:6379> exec 1) OK 127.0.0.1:6379> get test "123" 127.0.0.1:6379> multi OK 127.0.0.1:6379> set test 456 QUEUED 127.0.0.1:6379> discard OK 127.0.0.1:6379> get test "123" 127.0.0.1:6379> liuyue:~ liuyue$ clear
在python中操作redis事务 #导包 import redis #定义ip host = "localhost" #建立服务连接 r = redis.Redis(host=host) pipe = r.pipeline() #开启事务 pipe.multi() #存储子命令 pipe.set("key2", 4) #执行事务 pipe.execute() print(r.get("key2"))
甲流来袭专家建议每家备好5样东西,关键时候能救命!头条创作挑战赛新冠病毒感染还没有结束,甲流又大面积爆发,身边的人10个有8个都感染了甲流,发烧咳嗽头疼头晕四肢无力一个也没跑了。昨日,深圳市疾病风险评估报告显示当前深圳流感风险为中
山东女首富赵燕20元的东西卖到5000元,如今身价555亿她是我国最神秘的女首富,二十多岁抛弃金饭碗,白手起家,短短二十年就积累了500亿财富。她被称为玻尿酸女王,20元成本的液体卖到5000元,还引得万千女性追捧。2023年,赵燕登上央
这些网红打卡点请提前预约!预约!预约!(重要事情说三遍)来源华声在线华声在线3月13日讯(记者刘涛通讯员杜澳岚)春暖花开,草长莺飞,湖南省植物园的郁金香樱花等纷纷盛开,园区也迎来了客流高峰。上周末,省植物园入园游客达到人数上限,并出现游
很多家庭都有!1岁孩子误喝这东西进ICU,爸爸一个动作差点害了他前不久广东深圳一个1岁的孩子轩轩口吐白沫,陷入昏迷就因为那瓶电蚊香液轩轩爸爸李先生回忆那天10点多他把1岁多的儿子带回公司不久后他突然听到办公室传来小轩哭声意识到不对劲的他马上赶来
科雷亚西蒙尼的成就难以置信梅西的梦想就是世界杯冠军科雷亚近日在接受采访时谈到了西蒙尼和梅西,他表示西蒙尼取得的成就令人难以置信。科雷亚说道这些年来,西蒙尼帮助我成长为一名球员和一个人,我非常感激他。事实是,西蒙尼取得的成就令人难以
世界上存在着男人国你知道吗?想必大家都知道明代作家吴承恩西游记中描绘了关于女儿国的传说,国王到群臣及百姓都是全是女人,要怀孕就喝子母河的水就可以繁衍下一代。可神话终究是神话,世界上没有女儿国,但是有个地方确实
最强安检说到最强安检,那非烟台莫属,堪比机场,没有更严,只有最严!对于烟台,我印象深刻,因为工作原因经常会来到烟台,烟台的水果非常出名,烟台的大樱桃,莱阳的苹果,还有热情好客的烟台人,都让
九十五回库马西库马西是加纳第二大城市,阿散蒂地区的首府。位于加纳中南部的阿散蒂高地东南部,普拉河上游奥芬河流域丘陵区。东南距首都阿克拉南距西部地区首府塞康第均约180公里,是阿散蒂地区的政治经济
充分展现城市良好形象菏泽市城管局确保牡丹节会顺利举办记者李潇见习记者李可3月13日,2023世界牡丹大会和第32届菏泽国际牡丹文化旅游节新闻发布会召开。市城市管理局党组成员副局长程玉山对今年牡丹节会期间市容秩序维护有关情况进行了详细
2023成都赏花指南首发,承包你的整个春天!2023第一份早春赏花地图春来无事,只为花忙如果说成都最浪漫的季节春天一定可以提名这次,触长为大家找到了18个赏花地一秒带你穿越到荷兰的郁金香花海通往春天的浪漫金合欢氛围感MAX的
00后小伙和50岁富婆结伴旅行,一路从陌生到相熟从两年前开始,这个2000年出生的小伙一个人骑着汽车和摩托车走遍了全国。那时候,他还留着剪短的发型,还有一张年轻的脸。他多少岁了,一副蓬头垢面的样子,说四十岁也不为过。这一路上,他