事务-锁|学习笔记

简介: 快速学习事务-锁

开发者学堂课程【Redis 入门到精通(进阶篇)事务-锁】学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/765/detail/13434


事务-锁

 

内容介绍

一、基于特定条件的事务执行

二、watch 指令的使用

三、unwatch 指令的使用

 

一、基于特定条件的事务执行

1、业务场景

天猫双十一热卖过程中,对已经售罄的货物追加补货,四个业务员都有权限进行补货,补货的操作可能是一系列的操作牵扯到多个连续操作如何保证不会重复操作?

2、业务分析

多个客户端有可能同时操作同一组数据,并且该数据一旦被操作修改后,将不适用于继续操作。

在操作之前锁定要操作的数据,一旦发生变化,终止当前操作。

3、解决方案

对key添加监视所,在执行exec前如果key发生了变化,终止事务执行。

watch key1 [key2......]

取消对所有 key 的监视

Unwatch

 

二、watch 指令的使用

先设置两个值,set name123,set age321 下面就可以开 watch,如果想保证两个都不变再执行就写 watch name age,watch 定义事务 get name 可以执行

127.0.0.1:6379> f1ushdb  

OK

127.0.0.1:6379> keys 8  

(empty list or set)

127.0.0.1:6379>set name  123  

OK

127.0.0.1:6379>set age 321  

OK

127.0.0.1:6379>watch name  

OK

127.0.0.1:6379>get name  

"123"

127.0.0.1:6379>  multi

OK

127.0.0.1:6379>set aa bb  

QUEUED

127.0.0.1:6379> get a  

OUEUED

127.0.0.1:6379>exec

1)  OK

2) "bb'

如果讲它改变继续监控,在执行之前将另一个客户端去改 name 值

127.0.0.1:6379>  watch name age  

OK

127.0.0.1:6379>mu1ti

OK

127.0.0.1:6379>set aa cc  

QUEUED

127.0.0.1:6379>  get aa

QUEUED

127.0.0.1:6379>  exec

(ni1)

127.0.0.1:6379>

执行后会是空也就是说 watch 监控的指令一旦下面定义的事物不会再执行了。

不可以开启事务以后再 watch

127.0.0.1:6379>mu1ti

OK

127.0.0.1:6379>watch name

(error) ERR WATCH inside MULTI  is not allowed

127.0.0.1:6379>

 

三、unwatch 指令的使用

127.0.0.1:6379> watch name

(error) ERR WATCH inside MULTI is  not allowed  

127.0.0.1:6379>discard

OK

127.0.0.1:6379>watch  name

OK

127:0.0.1:6379>  get name

"321"

127.0.0.1:6379>  unwatch

OK

127.0.0.1:6379>  multi

OK

127.0.0.1:6379>set aa cc

QUEUED

127.0.0.1:6379>get aa

QUEUED

unwatch 不需要设定取消对谁的监视,是全部取消。执行前另一个客户端改变name 值,依然可以正常执行,这就是加锁与取消锁

127.0.0.1:6379>exec

1) OK

2) 127.0.0.1:6379>

"cc'

127.0.0.1:6379>

相关文章
|
存储 Shell Linux
Docker(24)- docker login 命令详解
Docker(24)- docker login 命令详解
2028 0
Docker(24)- docker login 命令详解
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
|
API
使用ModelScope平台进行模型验证时
【2月更文挑战第9天】使用ModelScope平台进行模型验证时
492 4
|
存储 SQL Cloud Native
Hologres 的架构设计与工作原理
【9月更文第1天】随着大数据时代的到来,实时分析和处理数据的需求日益增长。传统的数据仓库在处理大规模实时数据分析时逐渐显露出性能瓶颈。为了解决这些问题,阿里巴巴集团研发了一款名为 Hologres 的新型云原生交互式分析数据库。Hologres 能够支持 SQL 查询,并且能够实现实时的数据写入和查询,这使得它成为处理大规模实时数据的理想选择。
559 2
|
SQL 数据库
【计算机三级数据库技术】第6章 高级数据查询--附思维导图
提供了SQL查询的高级概念和应用,包括一般数据查询(如使用TOP、CASE和INTO关键字)、查询结构的并、交、差运算(UNION、INTERSECT、EXCEPT),相关子查询,替代子查询和派生表,以及开窗函数和公用表表达式(CTE)。文中还包含了思维导图,帮助读者更好地理解SELECT单表查询语句的要点。
259 4
|
网络协议 Linux iOS开发
8-18|如何查看本地端口
8-18|如何查看本地端口
|
Java Nacos Sentinel
Spring Cloud Alibaba学习指南
由于在2018年Netflix公司宣布对其核心组件Hystrix、Ribbon、zuul、Eureka等进入维护状态,也就是Spring Cloud Netflix系列。由此Spring Cloud Alibaba就诞生了,值得注意的是Spring Cloud Alibaba完全兼容了Spring Cloud Netflix中的Ribbon、Feign、Eureka等组件,所以基于Spring Cloud Netflix的项目可以无缝迁移到Spring Cloud Alibaba。
809 0
python tkinter中的锚点(anchor)问题
python tkinter中的锚点(anchor)问题
|
数据采集 数据可视化 数据挖掘
使用R语言进行主成分分析(PCA)
【4月更文挑战第26天】本文介绍了如何使用R语言进行主成分分析(PCA),包括安装必要包`stats`、`FactoMineR`和`factoextra`,数据预处理如标准化,使用`PCA()`函数执行PCA,以及通过`summary()`、`fviz_pca_ind()`和`fviz_pca_var()`进行结果解读和可视化。此外,还讨论了如何通过载荷系数解释主成分,强调PCA在数据降维和探索数据结构中的作用。
1183 1
|
测试技术 持续交付 开发工具
一文掌握:Gitlab的完整使用手册
一文掌握:Gitlab的完整使用手册