热门标签 | 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

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


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


推荐阅读
  • scrapyredis分布式爬虫 ... [详细]
  • 开发笔记:三分钟快速搭建分布式高可用的Redis集群
    开发笔记:三分钟快速搭建分布式高可用的Redis集群 ... [详细]
  • 成为一名高效的Java架构师不仅需要掌握高级Java编程技巧,还需深入理解JVM的工作原理及其优化方法。此外,对池技术(包括对象池、连接池和线程池)的应用、多线程处理、集合对象的内部机制、以及常用的数据结构和算法的精通也是必不可少的。同时,熟悉Linux操作系统、TCP/IP协议栈、HTTP协议等基础知识,对于构建高效稳定的系统同样重要。 ... [详细]
  • 本文档详细规划了从基础到高级的软件测试学习路径,包括但不限于测试基础、Linux和数据库、功能测试、Python编程、接口测试、性能测试、金融项目实战、UI自动化测试等内容,旨在为初学者和进阶者提供全面的学习指导。 ... [详细]
  • 本文探讨了Go语言(Golang)的学习价值及其在Web开发领域的应用潜力,包括其独特的语言特性和为什么它是现代软件开发的理想选择。 ... [详细]
  • 本文详细介绍了MySQL 5.5及以上版本中事务管理的全过程,包括事务的启动、设置、锁机制以及解锁方法,旨在为开发者提供一个清晰、全面的操作指南,避免因网络资料分散而导致的学习障碍。 ... [详细]
  • 在上一章【第三十九章:基于SpringBoot&Quartz完成定时任务分布式单节点持久化】中我们已经完成了任务的持久化,当我们创建一个任务时任务会被quartz定时任务框架自动持 ... [详细]
  • 本文探讨了缓存系统中的两个关键问题——缓存穿透与缓存失效时的雪崩效应,以及这些问题的解决方案。此外,文章还介绍了数据处理、数据库拆分策略、缓存优化、拆分策略、应用架构演进及通信协议的选择等内容。 ... [详细]
  • 深入解析Hcash的PoW+PoS混合共识机制优势
    本文探讨了Hcash项目如何通过结合工作量证明(PoW)和权益证明(PoS)两种共识机制,有效解决了单一机制下的诸多问题,如资源浪费、决策集中及安全风险等,实现了更广泛的社区参与和更高的安全性。 ... [详细]
  • 本文详细介绍了 Go 语言的关键特性和编程理念,包括其强大的并发处理能力、简洁的语法设计以及高效的开发效率。 ... [详细]
  • 自 Swift 3.0 以来,Grand Central Dispatch (GCD) 的使用方式有了显著的变化,变得更加简洁高效。本文将介绍 GCD 的核心概念,包括队列、同步与异步操作、服务质量 (QoS) 以及常见的使用场景。 ... [详细]
  • 本文详细介绍了RocketMQ中的消息并发消费机制,包括消息拉取后的处理流程、消费服务的调用以及消费任务的具体执行过程。 ... [详细]
  • 前端监控系列2 | 深入探讨JS错误监控的重要性与实践
    作者:彭莉,火山引擎APM研发工程师,专注于前端监控技术的研发。本文将深入讨论JS错误监控的必要性及其实现方法,帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 全面解读Apache Flink的核心架构与优势
    Apache Flink作为大数据处理领域的新兴力量,凭借其独特的流处理能力和高效的批处理性能,迅速获得了广泛的关注。本文旨在深入探讨Flink的关键技术特点及其应用场景,为大数据处理提供新的视角。 ... [详细]
  • 深入解析线程池的工作原理与实际应用
    本文详细探讨了线程池的核心概念、工作原理及其在实际开发中的应用,包括不同类型的线程池创建方式及其适用场景。 ... [详细]
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社区 版权所有