Redis详解4.事务

一年又一年,字节跳动 Lark(飞书) 研发团队又双叒叕开始招新生啦!
【内推码】:GTPUVBA
【内推链接】:https://job.toutiao.com/s/JRupWVj
【招生对象】:20年9月后~21年8月前 毕业的同学
【报名时间】:6.16-7.16(提前批简历投递只有一个月抓住机会哦!)
【画重点】:提前批和正式秋招不矛盾!面试成功,提前锁定Offer;若有失利,额外获得一次面试机会,正式秋招开启后还可再次投递。

章节目录

Redis详解1.安装及使用
Redis详解2.数据结构
Redis详解3.发布订阅
Redis详解4.事务
Redis详解5.数据持久化
Redis详解6.主从模式
Redis详解7.哨兵模式
Redis详解8.Cluster模式

1 Redis事务简介

有时为了处理多个key的数据,我们需要向Redis发送多个命令,尽管Redis有几个可以在两个键之间复制或移动元素的命令,但是该部分功能不足以满足生产环境需求,而且也没有不同数据类型之间操作的命令。为了能够在操作多个key的时候保持事务,需要使用Redis的事务功能。

2 基本事务命令

基本的事务操作由以下三个命令构成:MULTI(开启事务)、EXEC(提交事务)。

使用事务
  1. 执行MULI命令
  2. 然后输入那些我们想要在事务里面执行的命令
  3. 最后再执行EXEC命令。
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET age 18
QUEUED
127.0.0.1:6379> SET salary 25000
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) OK
事务过程
  1. 当 Redis从一个客户端那里接收到MULI命令时,Redis会将这个客户端之后发送的所有命令都放入到一个队列里面,直到这个客户端发送EXEC命令为止,然后Redis就会在不被打断的情况下,一个接一个地执行存储在队列里面的命令。
  2. 当一个事务执行完毕后,Redis才会处理其他客户端的命令。
  3. 当EXEC命令被调用之前不会执行任何当操作。
延迟执行事务有助于提升性能

Redis在执行事务的过程中,会延迟执行已入队的命令直到客户端发送EXEC命令为止。因此,很多 Redis客户端都会等到事务包含的所有命令都出现了之后,才一次性地将MULTI命令、要在事务中执行的一系列命令,以及EXEC命令全部发送给 Redis,然后等待直到接收到所有命令的回复为止。这种“一次性发送多个命令,然后等待所有回复出现”的做法通常被称为流水线,它可以通过减少客户端与Redis服务器之间的网络通信次数来提升Redis在执行多个命令时的性能。

Redis事务的不足

Redis的事务没有关系数据库事务提供的回滚(rollback)功能,为此开发者必须在事务执行出错后自己处理错误。如下所示:

127.0.0.1:6379> MULTI
OK
# 由于age是string类型所以下面这条语句会失败
127.0.0.1:6379> sadd age 10
QUEUED
127.0.0.1:6379> set salary 30000
QUEUED
127.0.0.1:6379> EXEC
1) (error) WRONGTYPE Operation against a key holding the wrong kind of value
2) OK
# 从结果可以看出虽然第一条语句执行失败,但第二条语句执行成功了
127.0.0.1:6379> get age
"18"
127.0.0.1:6379> get salary
"30000"

3 事务进阶命令

DICCARD
  1. 取消事务,放弃执行事务块内的所有命令。
  2. 如果正在使用WATCH命令监视某个key,那么取消所有监视,等同于执行命令UNWATCH。
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET age 20
QUEUED
127.0.0.1:6379> SET salary 30000
QUEUED
127.0.0.1:6379> DISCARD
OK
127.0.0.1:6379> GET age
"18"
127.0.0.1:6379> GET salary
"25000"
WATCH
  1. 监视一个(或多个) key
  2. 如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
127.0.0.1:6379> get age
"18"
127.0.0.1:6379> get salary
"30000"
127.0.0.1:6379> WATCH age
OK
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set age 20
QUEUED
# 此时用另一个client执行set age 5的操作
127.0.0.1:6379> set salary 30000
QUEUED
127.0.0.1:6379> EXEC
# 由于age被其他client修改,放弃事务
(nil)
127.0.0.1:6379> set age 5
OK
UNWATCH
  1. 取消WATCH命令对所有key的监视。
  2. 如果在执行WATCH命令之后, EXEC命令或DISCARD命令先被执行了的话,那么就不需要再执行UNWATCH了。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容