iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Redis 事务知识点相关总结
  • 836
分享到

Redis 事务知识点相关总结

2024-04-02 19:04:59 836人浏览 独家记忆
摘要

目录01 事务简介02 命令错误导致的事务提交失败,所有命令都不执行03 运行时错误导致数据错误04 丢弃事务05 watch命令06 总结Redis中的事务介绍  &nb

Redis中的事务介绍
    Mysql中的事务大家都不陌生,Redis中的事务和mysql中的事务不同,今天看下Redis事务中的一些知识点吧。

01 事务简介

    Redis中的事务使用multi、exec来标记,其中multi代表事务开始,exec代表事务结束,multi和exec之间的命令是原子顺序执行的。下面是一个例子:


127.0.0.1:7397> multi
OK
127.0.0.1:7397> set key_hello hello
QUEUED
127.0.0.1:7397> set key_world world
QUEUED
127.0.0.1:7397> exec
1) OK
2) OK

 需要注意的是,命令执行的中间结果返回都是queued,也就是说放到了队列里面,没有真正执行。在exec之前,如果使用get命令来查看当前的key_hello或者key_world的值,是无法获取到的。

02 命令错误导致的事务提交失败,所有命令都不执行

  如果调用api的时候,拼写错误,则会造成整个事务无法执行,例如下面的例子:


127.0.0.1:7397> multi
OK
127.0.0.1:7397> incr counter
QUEUED
127.0.0.1:7397> sett key_a aa
(error) ERR unknown command `sett`, with args beginning with: `key_a`, `aa`, 
127.0.0.1:7397> exec
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:7397> get counter
"10"

 可以看到,因为set拼写错误,写成了sett,整个事务内部的所有动作都失效。exec命令也报错。

03 运行时错误导致数据错误

 如果语法正确,但是在运行的时候出现了"运行时"错误,例如元素的类型和操作符不匹配,例如对字符型值进行自增操作,如下:


127.0.0.1:7397> get key_a
"a"
127.0.0.1:7397> get key_b
"b"
127.0.0.1:7397> multi
OK
127.0.0.1:7397> incr key_a
QUEUED
127.0.0.1:7397> set key_b bbb
QUEUED
127.0.0.1:7397> exec
1) (error) ERR value is not an integer or out of range
2) OK
127.0.0.1:7397> get key_b
"bbb"

  对key_a进行自增这类错误,它的语法是正确的,但是由于key_a是字符型的,自增操作是不合适的,事务中还对key_b进行了赋值操作,在执行exec的时候,key_b的值是被修改的,从"b"变成了“bbb”。

04 丢弃事务

   直接看例子,在执行的最后,使用discard关键字对事务进行丢弃,那么事务执行过程中产生的key是没有值的。


127.0.0.1:7397> multi
OK
127.0.0.1:7397> set key_aa aa
QUEUED
127.0.0.1:7397> set key_bb bb
QUEUED
127.0.0.1:7397> set key_cc cc
QUEUED
127.0.0.1:7397> discard
OK
127.0.0.1:7397> get key_aa
(nil)
127.0.0.1:7397> get key_bb
(nil)
127.0.0.1:7397> get key_cc
(nil)

05 watch命令

  有些场景中,需要在事务之前,确保事务中的key没有被其他客户端修改过,才执行事务,否则不执行事务,redis提供了watch命令来解决这类问题。

正确场景:


127.0.0.1:7397> watch key_a
OK
127.0.0.1:7397> multi
OK
127.0.0.1:7397> set key_a aaa
QUEUED
127.0.0.1:7397> exec
1) OK
127.0.0.1:7397> get key_a
"aaa"

使用watch监控key_a的值,在exec之前,key_a的值没有被其他事务修改过,那么exec的结果是成功的。

错误场景:


127.0.0.1:7397> watch key_a
OK
127.0.0.1:7397> get key_a
"aaa"
----------------------------------------
此时在另外一个session上执行set key_a aaaaaa
----------------------------------------
127.0.0.1:7397> multi 
OK
127.0.0.1:7397> set key_a a
QUEUED
127.0.0.1:7397> exec
(nil)

在watch的过程中,其他session对key_a的值进行了修改,那么会造成exec执行失败,返回nil

06 总结

1、Redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令,分为三个过程:开始事务、命令入队、执行事务。

2、Redis提供了简单的事务,使用multi、exec、discard这三个命令来控制

3、exec命令前,所有的原子操作都被放在队列中缓存,并不会真正执行

4、Redis事务不存在隔离级别的概念

5、事务中的单条命令是原子执行的,但是事务本身不保证原子性,没有回滚机制

以上就是Redis 事务相关总结的详细内容,更多关于Redis 事务的资料请关注编程网其它相关文章!

--结束END--

本文标题: Redis 事务知识点相关总结

本文链接: https://www.lsjlt.com/news/122367.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Redis 事务知识点相关总结
    目录01 事务简介02 命令错误导致的事务提交失败,所有命令都不执行03 运行时错误导致数据错误04 丢弃事务05 watch命令06 总结Redis中的事务介绍  &nb...
    99+
    2022-11-11
  • HTML相关知识点总结
    目录简介HTML文档和网页的关系呢?HTML的标签样子?HTML基本概念标签元素属性注释编码规则HTML常用元素标题段落链接跳转页面:跳转锚点图片列表有序列表无序列表定义列表表格块表...
    99+
    2022-11-12
  • 云服务器相关知识点总结
    云服务器是一种虚拟的、服务器化的服务,可以提供按需使用、按量计费的服务,可以实现弹性扩展、自动负载均衡、快速响应、高可靠性等一系列功能,是许多企业和开发者的重要选择。以下是一些云服务器相关的知识点总结: 什么是云服务器:云服务器是一种通...
    99+
    2023-10-26
    知识点 服务器
  • 总结HTML相关知识
    这篇文章主要介绍“总结HTML相关知识”,在日常操作中,相信很多人在总结HTML相关知识问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”总结HTML相关知识”的疑惑有所帮助!接...
    99+
    2022-10-19
  • 云服务器相关知识点总结报告
    一、云服务器的基本概念 云服务器是一种常见的计算资源,通常由大型企业或云服务提供商提供。云服务器是一种虚拟化技术,可以将多个计算资源组合成一个虚拟服务器,并通过互联网连接在一起。用户可以通过云服务器访问和管理各种云服务,包括云存储、云数据...
    99+
    2023-10-27
    知识点 总结报告 服务器
  • Android Insets相关知识总结
    目录什么是Insets?Insets相关类InsetsStateInsetsStateControllerInsetsSourceInsetsSourceConsumer(ImeIn...
    99+
    2022-11-11
  • Spring Cache相关知识总结
    简介  Spring 从 3.1 开始定义了 org.springframework.cache.Cache 和 org.springframework.cache.Cac...
    99+
    2022-11-12
  • Java中的枚举相关知识点总结
    这篇文章主要讲解了“Java中的枚举相关知识点总结”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中的枚举相关知识点总结”吧!Java中的枚举枚举通常是一组相关的常量集合,其他编程语言...
    99+
    2023-06-15
  • MySQL 日志相关知识总结
    数据库中用于存储数据的文件称为data file,日志文件称为log file。此外,如果每次读写都是直接访问磁盘,性能很差,所以数据库是有缓存的,数据缓存是data buffer,日志缓存log buffer。 s...
    99+
    2022-05-21
    MySQL 日志
  • MySQL 锁的相关知识总结
    MySQL中的锁 锁是为了解决并发环境下资源竞争的手段,其中乐观并发控制,悲观并发控制和多版本并发控制是数据库并发控制主要采用的技术手段(具体可见我之前的文章),而MySQL中的锁就是其中的悲观并发控制。 MySQ...
    99+
    2022-05-14
    MySQL
  • MySQL权限相关知识总结
    本篇内容主要讲解“MySQL权限相关知识总结”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL权限相关知识总结”吧! 一.权限表 mysql中的3个权...
    99+
    2022-10-18
  • Android字体相关知识总结
    目录一、Android 默认字体介绍二、textStyle三、typeface四、fontFamily 五、textStyle,typeface,fontFamily 三者...
    99+
    2022-11-12
  • 云服务器相关知识点汇总
    云服务器是一种虚拟的、共享的、高可用的计算资源,通常用于远程服务器环境。作为云计算的重要组成部分之一,云服务器的管理、运维和性能优化是非常重要的。以下是一些常见的云服务器相关知识点: 数据备份和恢复:云服务器提供数据备份和恢复的功能,可...
    99+
    2023-10-26
    知识点 服务器
  • python文件操作相关知识点总结整理
    本文汇总了python文件操作相关知识点。分享给大家供大家参考,具体如下: 总是记不住API。昨晚写的时候用到了这些,但是没记住,于是就索性整理一下吧: python中对文件、文件夹(文件操作函数)的操作需...
    99+
    2022-06-04
    知识点 操作 文件
  • mysql中null(IFNULL,COALESCE和NULLIF)相关知识点总结
    本文实例讲述了mysql中null(IFNULL,COALESCE和NULLIF)相关知识点。分享给大家供大家参考,具体如下: 在MySQL中,NULL值表示一个未知值,它不同于0或空字符串'',并且不等于...
    99+
    2022-10-18
  • JavaScript垃圾回收器的相关知识点总结
    本篇内容介绍了“JavaScript垃圾回收器的相关知识点总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2022-10-19
  • Java中类与对象的相关知识点总结
    目录一、面向过程与面向对象的理解二、类与对象的理解与认识三、类的成员1.字段/属性/成员变量2.对null的基本认识3.方法 (method)4.static 关键字四、封装1. p...
    99+
    2022-11-12
  • MySQL 慢日志相关知识总结
    目录  1.慢日志简介  2.慢日志实战  1.慢日志简介 慢日志全称为慢查询日志(Slow Query Log),主要用来记录在 MySQL 中执行时间超过指定时间的 SQL 语句。通...
    99+
    2022-05-22
    MySQL 慢日志
  • java类加载相关知识总结
    目录类加载器代码示例ClassLoader 中的两个方法类加载器 类加载器作用 负责将.class文件(存储的物理文件)加载到内存中 类加载器过程 加载:通过...
    99+
    2022-11-12
  • Java与Mysql锁相关知识总结
    目录锁的定义锁的实现JVM中的锁synchronizedReentrantLockMysql 锁共享锁(S) 与排它锁(X)作用范围意向锁作用范围记录锁间隙锁Next-Key Loc...
    99+
    2023-05-16
    Java与MySQL中的锁 Java中使用Mysql数据库实现锁 java mysql锁实现
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作