`

redis之事务

 
阅读更多

1.是什么

可以一次执行多个命令,本质是一组命令的集合。一个事务中的

所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞

 

2.能干嘛

一个队列中,一次性、顺序性、排他性的执行一系列命令

 

3.怎么玩

case1:正常执行

Case2:放弃事务

Case3:全体连坐

Case4:冤头债主

Case5:watch监控

悲观锁/乐观锁/CAS(Check And Set)

 悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁

 乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,


乐观锁策略:提交版本必须大于记录当前版本才能执行更新

无加塞篡改,先监控再开启multi,
保证两笔金额变动在同一个事务内

有加塞篡改
监控了key,如果key被修改了,后面一个事务的执行失效

 unwatch
一旦执行了exec之前加的监控锁都会被取消掉了

小结【
Watch指令,类似乐观锁,事务提交时,如果Key的值已被别的客户端改变,
比如某个list已被别的客户端push/pop过了,整个事务队列都不会被执行

通过WATCH命令在事务执行之前监控了多个Keys,倘若在WATCH之后有任何Key的值发生了变化,
EXEC命令执行的事务都将被放弃,同时返回Nullmulti-bulk应答以通知调用者事务执行失败】

开启:以MULTI开始一个事务
入队:将多个命令入队到事务中,接到这些命令并不会立即执行,而是放到等待执行的事务队列里面
执行:由EXEC命令触发事务

特性【
没有隔离级别的概念:队列中的命令没有提交之前都不会实际的被执行,因为事务提交前任何指令都不会被实际执行,
也就不存在”事务内的查询要看到事务里的更新,在事务外查询不能看到”这个让人万分头痛的问题

不保证原子性:redis同一个事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚】

 

 

  代码演示:



 

 

 

 

 

 redis支持事务吗?

综上例子能得出结论:redis对于事务的支持是部分支持。



 

  

  • 大小: 38.9 KB
  • 大小: 20.4 KB
  • 大小: 18.2 KB
  • 大小: 32.5 KB
  • 大小: 28.5 KB
  • 大小: 39 KB
分享到:
评论

相关推荐

    记录redisson实现redis分布式事务锁

    本篇文章将详细探讨如何使用Redisson实现Redis分布式事务锁,以及在Spring Boot环境中如何进行集成。 首先,Redis作为一个内存数据库,其高速读写性能使其成为实现分布式锁的理想选择。分布式锁的主要作用是在多...

    springboot-redis事务

    本文将深入探讨“SpringBoot-Redis事务”这一主题,旨在帮助开发者理解如何在SpringBoot项目中利用Redis进行事务操作。 首先,SpringBoot是Spring框架的一种快速启动方式,它简化了配置,提供了自动配置的功能,...

    redis事务与关系型数据库事务比较

    【Redis 事务与关系型数据库事务的比较】 Redis 和关系型数据库(如 MySQL)在事务处理上有显著的差异。在Redis中,事务提供了一种批量执行命令的方式,以确保原子性,但其机制与传统的ACID(原子性、一致性、隔离...

    cpp-Redis分布式事务

    标题中的“cpp-Redis分布式事务”表明我们讨论的是如何在C++编程环境下利用Redis来实现分布式事务处理。Redis是一款开源的、基于键值对的数据存储系统,常用于缓存、消息队列以及分布式场景中。在大型游戏中,由于...

    redis面试题之事务.zip

    接下来,我们将深入探讨Redis事务的相关知识点。 首先,Redis的事务是批量执行命令的机制,允许用户一次性发送多条命令,然后在服务器端按顺序执行这些命令,保证了命令的原子性。这意味着在事务执行期间,不会有...

    08-Redis HyperLogLog与事务和Redis 7.0那点事-ev.rar

    08-Redis HyperLogLog与事务和Redis 7.0那点事_ev.rar08-Redis HyperLogLog与事务和Redis 7.0那点事_ev.rar08-Redis HyperLogLog与事务和Redis 7.0那点事_ev.rar08-Redis HyperLogLog与事务和Redis 7.0那点事_ev.rar...

    redis事务回滚工具

    基于SpringBoot的轻量级redis事务回滚机制,使用栈和ThreadLocal记录业务链的redis操作,发生异常进行回滚,参考了阿里巴巴Seata AT模式的db回滚策略:补偿回滚,记录前镜像与当前操作语句,反向解析生成补偿动作。...

    redis事务常用操作详解

    Redis 事务是数据库系统中的一种特性,允许用户一次性提交...例如,Redis事务不支持回滚操作,如果事务中的某条命令失败,后续命令仍会执行。因此,在设计使用Redis的事务时,需要考虑到这些限制并进行适当的错误处理。

    redis常用命令,redis配置文件,redis持久化,redis事务,redis主从复制,jedis的使用

    下面是对 Redis 的常用命令、配置文件、持久化、事务、主从复制、Jedis 使用的详细讲解。 Redis 常用命令 Redis 提供了很多有用的命令来管理和操作数据。下面是一些常用的 Redis 命令: * SET key value:设置...

    redis事务_动力节点Java学院整理

    Redis 事务(Transactions)是 Redis 数据库提供的一种批量执行命令的功能,尽管它的事务机制相比于传统的关系型数据库事务较为简化,但仍能满足一些基本的事务需求。Redis 事务的主要特点在于其简单、快速和高效,...

    redis_事务_.pptx

    Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令

    Redis之Redis事务

    本文主要介绍了Redis事务的概念、Redis不保证原子性、Redis事务的三个阶段、Redis事务相关命令以及Redis事务使用案例。 本文来自于博客园,由火龙果软件Anna编辑、推荐。Redis事务的本质是一组命令的集合。事务支持...

    redis事务处理:(error) EXECABORT

    然而,事务处理并非总是顺利进行,"redis事务处理:(error) EXECABORT" 是一个常见的错误提示,意味着在执行事务时遇到了问题。本文将深入探讨这个错误的原因以及如何解决。 一、Redis 事务基础 Redis 的事务机制...

    redis的高级事务CAS(乐观锁).rar

    在 Redis 的事务中,虽然没有像 SQL 事务那样的显式锁定机制,但通过 CAS 操作,可以实现类似的功能。 Redis 事务主要通过 `MULTI`、`EXEC` 命令来实现。当客户端发送 `MULTI` 命令后,Redis 会进入事务模式,接收...

    redis_事务_.mp4

    Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令

    redis 免安装 redis客户端 redis-desktop-manager-0.8.8.384

    3. **事务**:Redis 支持事务,可以一次性执行多个操作,并保证其原子性。 4. **复制**:Redis 提供了主从复制功能,允许将数据复制到多个从节点,提高数据可用性和读取性能。 5. **集群**:Redis 集群模式支持...

    redis事务1

    Redis 事务是 Redis 数据库提供的一种批量执行命令的机制,旨在提高数据操作的效率和原子性。虽然在传统的数据库系统中,事务具有ACID(原子性、一致性、隔离性和持久性)特性,但 Redis 事务并不完全具备这些特性。...

    redis实战 红豆出品 兄弟连redis

    Redis之所以受到广大开发者的喜爱,是因为它具有速度快、支持数据持久化、支持复制和高可用、支持事务等特性。 本知识点将从Redis的基本使用、数据类型及操作、常用命令、高级特性四个方面详细介绍Redis。 一、...

Global site tag (gtag.js) - Google Analytics