ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Redis-3.0.503 事务-12

2022-08-11 14:31:33  阅读:116  来源: 互联网

标签:事务 12 组队 队列 Redis 命令 执行 503


1.Redis 事务定义

Redis 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

Redis 事务的主要作用就是串联多个命令防止别的命令插队。

乐观锁 (Optimistic Lock),顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量。

Redis 就是利用这种 check-and-set 机制实现事务的。

2.事务的开启

Multi、Exec、discard

Redis 事务中有 Multi、Exec 和 discard 三个指令,在 Redis 中,从输入 Multi 命令开始,输入的命令都会依次进入命令队列中,但不会执行,直到输入 Exec 后,Redis 会将之前的命令队列中的命令依次执行。而组队的过程中可以通过 discard 来放弃组队。

开启事务,进行执行

开启事务,放弃组队



3.Redis 事务中的两大命令错误:

(1) 组队中某个命令出现了错误,执行时整个的所有队列都会被取消。

例如:在设置键值对的时候,没有对键赋值,就会报错,在这种情况下去执行,队列就会呗取消。

(2) 如果执行阶段某个命令报出了错误,则只有报错的命令不会被执行,而其他的命令都会执行,不会回滚。

例如:在组队命令中,对一个String使用其他类型的命令,那么在执行时,只有该语句不会执行,其他语句照样执行。

4.如何在Redis中使用乐观锁

watch命令

在执行 multi 之前,先执行 watch key1 [key2],可以监视一个 (或多个) key ,如果在事务执行之前这个 (或这些) key 被其他命令所改动,那么事务将被打断。

在上图中,都对k1进行了监视,开启队列后,都对k1进行修改操作,执行任务队列后,先执行的客户端完成了对k1的修改,第二个客户端在执行后发现k1的版本号不对了,第二个客户端的事务就被打断了。

unwatch命令

标签:事务,12,组队,队列,Redis,命令,执行,503
来源: https://www.cnblogs.com/ggzs/p/16573945.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有