热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

redis学习(四)redis事务

redis事务1.redis事务介绍redis的事务可以理解为一系列串行命令的集合。redis的事务和单条命令一样,都是redis的最小执行单位,因此一个事务内的命令,要么全部执行,要么全
redis事务

1.redis事务介绍

  redis的事务可以理解为一系列串行命令的集合。redis的事务和单条命令一样,都是redis的最小执行单位,因此一个事务内的命令,要么全部执行,要么全部不执行。事务的概念对于熟悉数据库的人们并不陌生,而redis作为一个数据库系统,必然会对事务进行一定的支持。
  redis实现事务的方式简单来说是将一系列的命令先保存在一个队列中,然后交给redis串行化的顺序执行。

2.redis事务常用命令

  2.1 MULTI(开启事务)

    MULTI命令:用于开启redis事务。在同一个客户端内,一旦开启了事务,代表着进入了事务状态,后续输入的所有命令都将被加入事务命令队列,而不是立即执行。   

  2.2 EXEC(提交事务)

    EXEC命令:用于提交事务。提交事务代表着将当前事务命令队列中的命令交给redis一并执行。

  2.3 DISCARD(放弃事务)

    DISCARD命令:用于放弃事务。放弃事务代表着销毁当前事务命令队列,不进行任何操作,同时当前客户端退出事务状态。

  2.4 WATCH

    WATCH命令:用于监视key的变化。由于redis支持多用户,通常在执行事务的过程中,不希望其它的用户修改我们正在操作的key。redis出于并发性能的考虑,不支持悲观锁的机制(通过阻塞或者报错来阻止其它用户修改上锁的数据),而是采用了类似乐观锁的机制。redis提供了WATCH命令来实现事务的“检查再设置”(CAS)行为,WATCH命令可以同时监听多个key的变化,在事务执行过程中一旦发现被监听的key被修改过,将会放弃执行事务,这时应该由用户来进行重试。

  2.5 UNWATCH

    UNWATCH命令:用于解除WATCH状态。UNWATCH之后,当前客户端将解除所有的WATCH监听

3.redis事务——错误处理

  在事务执行过程中可能会出现错误,redis将错误分为两类区别对待。

  1.语法错误(编译时错误)

  语法错误,即redis执行的命令本身就是错误的,这类错误可以在事务真正执行之前就被发现,例如参数不符合规范等。如同通用编程语言的编译时错误,由于这样的错误应当通过仔细的检查来完全避免,因此,redis在发现事务中存在语法错误时,会直接放弃整个事务。

  2.非语法错误(运行时错误)

  非语法错误,即redis无法在真正执行命令之前发现的错误。例如"incr"命令要求数据必须是数字类型,而是否是数字类型,取决于运行时的状态。如同通用编程语言的运行时错误,这样的错误通常无法完全避免,因此,redis在发现命令存在非语法错误时,不会影响事务中其它命令的正常执行。

4.redis事务和脚本

  redis在2.6版本后提供了非常灵活的脚本功能。脚本和事务类似,同样可以理解为一连串命令的执行,redis会将脚本一口气串行的执行完。redis脚本比事务更加的强大,事务能完成的任务,脚本也能完成。但相对而言,比起编写复杂的脚本,redis本身的事务特性是最简单的。

5.redis事务总结

  redis作为一款非关系型数据库服务器,对事务的支持是远远比不上传统的关系型数据库的。redis事务不支持回滚,对事务ACID特性的支持也不尽如人意。但正因为redis功能的简单性,redis拥有极高的可用性。所以在实际业务选型时,应该扬长避短,不去过分依赖redis的事务特性,而是充分利用redis的高可用性,对于一些对事务要求很高的场合,转而使用传统的关系型数据库来满足需求。

 


推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
author-avatar
天极玩家_136
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有