热门标签 | 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在大规模数据处理中的卓越性能。 ... [详细]
  • 全面解析运维监控:白盒与黑盒监控及四大黄金指标
    本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ... [详细]
  • 优化Flask应用的并发处理:解决Mysql连接过多问题
    本文探讨了在Flask应用中通过优化后端架构来应对高并发请求,特别是针对Mysql 'too many connections' 错误的解决方案。我们将介绍如何利用Redis缓存、Gunicorn多进程和Celery异步任务队列来提升系统的性能和稳定性。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 本文探讨了在Java多线程环境下,如何确保具有相同key值的线程能够互斥执行并按顺序输出结果。通过优化代码结构和使用线程安全的数据结构,我们解决了线程同步问题,并实现了预期的并发行为。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • 本文详细介绍了Grand Central Dispatch (GCD) 的核心概念和使用方法,探讨了任务队列、同步与异步执行以及常见的死锁问题。通过具体示例和代码片段,帮助开发者更好地理解和应用GCD进行多线程开发。 ... [详细]
  • 并发编程 12—— 任务取消与关闭 之 shutdownNow 的局限性
    Java并发编程实践目录并发编程01——ThreadLocal并发编程02——ConcurrentHashMap并发编程03——阻塞队列和生产者-消费者模式并发编程04——闭锁Co ... [详细]
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社区 版权所有