Redis(四)事务 multi、exec

news/2024/7/7 20:45:21

哈喽,大家好,我是有勇气的牛排(全网同名)🐮🐮🐮

有问题的小伙伴欢迎在文末评论,点赞、收藏是对我最大的支持!!!。

文章目录

    • 1 前言
      • 1.1 什么是Redis事务
      • 1.2 Redis事务 & 数据库事务
    • 2 常用命令
      • 2.1 正常执行
      • 2.2 放弃事务
      • 2.3 全体连坐(保证全部成功)
      • 2.4 冤头债主(失败不影响成功的)
      • 2.5 watch监控

官方文档:https://redis.io/docs/manual/transactions/

1 前言

1.1 什么是Redis事务

定义:可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地执行,而不会被其他命令插入,不许加塞。

功能:一个队列中,一次性、顺序性、排他性的执行一系列命令。

1.2 Redis事务 & 数据库事务

1、单独的隔离操作Redis的事务仅仅是保证事务的操作会被连续独占的执行,redis命令执行时单线程架构,在执行完事务内所有指令前不可能再去同时执行其他客户端请求的
2、没有隔离级别的概念因为事务提交前任务指令都不会被实际执行,也就不存在“事务内的查询要看到事务里的更新,在事务外查询不能看到”这种问题了
3、不保证原子性Redis的事务不能保证原子性,也就是不保证所有指令同时成功or同时失败,只有决定是否开始执行全部指令的能力,没有执行到一半进行回滚的能力
4、排他性Redis会保证一个事务的命令一次执行,而不会被其他命令插入。

2 常用命令

2.1 正常执行

multi
....
exec

2.2 放弃事务

discard

2.3 全体连坐(保证全部成功)

假设其中一个语法出错,则所有命令都失败

multi

set a 1
set b		# 错误语法

exec

2.4 冤头债主(失败不影响成功的)

假设有错误命令,成功的不受影响

2.5 watch监控

Redis使用Watch来提供乐观锁定,类似于CAS(Check-and-Set)

  • 悲观锁
  • 乐观锁
  • CAS

就是在exec前,如果原数据被修改,则本此事务失败

# 监控锁
watch <key>

# 放弃监控
unwatch
# 悲观锁(Pessmistic Lock)
每次拿数据的时候都会认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block,直达它拿到锁。

# 乐观锁(Optimistic Lock)
每次拿数据的时候会认为别热不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有咩有去更新这个数据。

乐观锁策略:提交版本必须 > 记录当前版本才能执行更新

image.png


http://lihuaxi.xjx100.cn/news/1023791.html

相关文章

【Android平板编程】远程Ubuntu服务器code-server编程写代码

文章目录前言1.ubuntu本地安装code-server2. 安装cpolar内网穿透3. 创建隧道映射本地端口4. 安卓平板测试访问5.固定域名公网地址5.结语前言 本次教程将在 Ubuntu 服务器环境下安装 code-server &#xff0c;并使用 Android 安卓平板远程 Ubuntu 服务&#xff0c;进行远程编程开…

《剪花布条》:从花布条中尽可能剪出几块小饰条

目录 一、题目 二、思路 1、代码中要使用的String类中的方法 &#xff08;1&#xff09;判断 s 中是否有 t &#xff08;2&#xff09;将 s 分割 2、递归判断 三、代码 详细注释版本 简化注释版本 一、题目 题目&#xff1a;剪花布条 题目链接&#xf…

hjr-高并发系统如何保障高可用

高并发 高并发指的是 分布式系统中 并行处理的能力 在WEB开发中&#xff0c;两种情况会遇到高并发 1、TO C系统中 海量的用户请求 2、TO B系统中 海量的终端数据上报 分布式与集群 分布式系统与集群系统是有区别的 分布式指的是不同的节点负责不同的功能 集群指的是相同…

用Flutter开发一款企业级App(开眼Flutter-OpenEye)

先贴项目地址&#xff1a;WinWang/open_eye: Flutter 开眼APP&#xff1a;整体项目架构基于Getx搭建&#xff0c;完成路由&#xff0c;依赖注入&#xff1b;网络请求框架基于RetrofitDio实现&#xff0c;配合官方JsonSerialize实现解析&#xff1b;封装项目页面多状态&#xff…

解锁ERD Online 高级隐藏功能

ERD Online 是全球第一个开源、免费在线数据建模、元数据管理平台。提供简单易用的元数据设计、关系图设计、SQL 查询等功能&#xff0c;辅以版本、导入、导出、数据源、SQL 解析、审计、团队协作等功能、方便我们快速、安全的管理数据库中的元数据。 ERD Online 产品图鉴 ERD …

《算法笔记》4.2小节——算法初步->哈希->问题 B: 分组统计

题目描述&#xff1a; 先输入一组数&#xff0c;然后输入其分组&#xff0c;按照分组统计出现次数并输出&#xff0c;参见样例。 输入 输入第一行表示样例数m&#xff0c;对于每个样例&#xff0c;第一行为数的个数n&#xff0c;接下来两行分别有n个数&#xff0c;第一行有n…

2023年全国最新道路运输从业人员精选真题及答案48

百分百题库提供道路运输安全员考试试题、道路运输从业人员考试预测题、道路安全员考试真题、道路运输从业人员证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 178.客运企业应当逐步建立客运车辆技术信息化管理系统&#xff…

【Java基础】day14

day14 一、什么是 RESTful 架构&#xff1f; REST 全称是 Representational State Transfer&#xff0c;中文意思是表征性状态转移。它首次出现在 2000 年 Roy Fielding 的博士论文中&#xff0c;Roy Fielding 是 HTTP 规范的主要编写者之一。 他在论文中提到&#xff1a;我这…