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

Redis事务

redis事务就是将一系列命令打包成一个队列之后,一起执行。中间不允许其他命令打断。1.基本操作开启事务。此后所有命令,都会放进队列里面。multi执行事务。一次性将队列里面所有事




  • redis事务就是将一系列命令打包成一个队列之后,一起执行。中间不允许其他命令打断。

1. 基本操作
  • 开启事务。此后所有命令,都会放进队列里面。

    multi

  • 执行事务。一次性将队列里面所有事务都执行了。

    exec
    在这里插入图片描述

  • 取消事务。终止当前事务的定义,发生在multi之后,exec之前

    discard
    在这里插入图片描述


2. 注意事项
  • 如果在定义事务期间,出现语法错误,就直接整个事务崩了。最后也没办法执行。
    在这里插入图片描述
  • redis的事务没有回滚操作,执行了就是执行了。即使中间出错了,前面执行的也不会回滚。
    在这里插入图片描述

3. 锁

3.1 监视锁


  • 即监视某个key的变化,如果在事务初始化multi之后,事务执行(exec)之前,该key发生了变化。则该事务不能执行。
  • 无论在事务里面有没有对该key进行操作,事务一律不能执行。
  • 该操作,可以防止多个客户端同时操作的时候,发生一些并发的情况。

3.1.1 操作


  • 在声明事务之前,声明要监视的key

    watch key1 [key2……]

  • 可以在事务声明之前,提前取消所有watch。否则,在事务里面就没办法取消了。

    unwatch

  • 声明事务

    multi

  • 一系列操作
  • 执行事务。如果再次之前key发生了变化,那就直接崩了,没办法执行。

    exec


3.2 分布式锁


  • 这就是个防君子不防小人的玩意…
  • 之前在基本数据类型中提到,在创建key的时候,可以通过setnx实现当没有的时候创建,存在的时候不创建。
  • 借此,这里就可以创建一个分布式锁。当该锁已经被创建了,那就不执行自己的任务,直到上一个客户端执行完之后,删除了该锁。
  • 因此,需要客户端之间协商出一个协议,将该锁取相同的名字。

3.2.1 实现


  • 创建一个公共锁。如果已经被设置了,那就自己在外面等待,直到该锁已经被del

    setnx lock-key value

  • 删除锁。其他客户端就可以设置了。

    del lock-key

  • 但是,如果客户端忘记了解锁。那就完蛋了,别的客户端一直在外面等。因此,可以给锁设一个生命周期,在指定时间内,如果没被删除,那就自动失效。

    expire lock-key second
    pexpire lock-key milliseconds

    第一个是秒级的,第二个是毫秒级的


  • 由于操作通常都是微秒或毫秒级,因此该锁定时间不宜设置过大。具体时间需要业务测试后确认。


推荐阅读
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
  • FinOps 与 Serverless 的结合:破解云成本难题
    本文探讨了如何通过 FinOps 实践优化 Serverless 应用的成本管理,提出了首个 Serverless 函数总成本估计模型,并分享了多种有效的成本优化策略。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • 本文探讨了哪些数据库支持队列式的写入操作(即一个键对应一个队列,数据可以连续入队),并且具备良好的持久化特性。这类需求通常出现在需要高效处理和存储大量有序数据的场景中。 ... [详细]
  • Netflix利用Druid实现高效实时数据分析
    本文探讨了全球领先的在线娱乐公司Netflix如何通过采用Apache Druid,实现了高效的数据采集、处理和实时分析,从而显著提升了用户体验和业务决策的准确性。文章详细介绍了Netflix在系统架构、数据摄取、管理和查询方面的实践,并展示了Druid在大规模数据处理中的卓越性能。 ... [详细]
  • 全面解析运维监控:白盒与黑盒监控及四大黄金指标
    本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 深入解析:阿里实战 SpringCloud 微服务架构与应用
    本文将详细介绍 SpringCloud 在微服务架构中的应用,涵盖入门、实战和案例分析。通过丰富的代码示例和实际项目经验,帮助读者全面掌握 SpringCloud 的核心技术和最佳实践。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 本文详细介绍了Grand Central Dispatch (GCD) 的核心概念和使用方法,探讨了任务队列、同步与异步执行以及常见的死锁问题。通过具体示例和代码片段,帮助开发者更好地理解和应用GCD进行多线程开发。 ... [详细]
author-avatar
凤凰花开清风自来_406
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有