首页 > 数据库 >redis学习十七:redis事务

redis学习十七:redis事务

时间:2023-07-10 17:34:33浏览次数:37  
标签:十七 redis 事务 命令 指令 key 执行

概念:可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其他命令插入,不许加塞。

1.单独的隔离操作

redis的事务仅仅是保证事务里的操作会被连续独占的执行,redis命令执行是单线程架构,

在执行完事务内所有指令前是不可能再去同时执行其他客户端的请求的

2.没有隔离级别的概念

因为事务提交前任何指令都不会被实际执行,也就不存在“事务内的查询要看到事务里的更新,

在事务外查询不能看到”这种问题了

3.不保证原子性

redis的事务不保证原子性,也就是不保证所有指令同时成功或同时失败,只有决定是否开始

执行全部指令的能力,没有执行到一般进行回滚的能力

4.排它性 redis会保证一个事务内的命令依次执行,而不会被其他命令插入

 

 

 

 

 

 

 

 

实操:

(1)discard:取消事务,放弃执行事务块内的所有命令

(2)exec:执行所有事务块内的命令

(3)multi:标记一个事务块的开始

(4)unwatch:取消watch命令对所有key的监视

(5)watch key[key...]:监视一个或多个key,如果在事务执行之前这个key被其他命令所改动,那么事务将被打断

1.正常执行

queued吧指令放入队列中到时候一起执行

 2.放弃事务

从k3没变化可以看出来放弃成功了

 3.全体连坐

一个语法写错全部不执行

 4.冤头债主

语法没错但是执行报错(因为em对应值没有自增),只有那个错误的没有执行

 5.watch监控(用的乐观锁)

悲观锁:顾名思义,很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁

乐观锁:很乐观,每次去拿的时候认为别不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别有没有去更新这个数据(乐观锁策略:提交版本必须大于记录当前版本才能执行更新)

 

先监控再修改,这样整个事务执行就不会成功,中间事务中使用unwatch放弃监控执行即可成功

 小结:一但执行了exec之前加的监控锁都会被取消掉了

当客户端连接丢失的时候(比如退出连接),所有的东西都会取消监视

总结:

1.开启:multi

2.入队:将多个命令入队到事务中,并不会立即执行,而是放到等待执行的事务队列中

3.执行:由exec命令触发事务

 

标签:十七,redis,事务,命令,指令,key,执行
From: https://www.cnblogs.com/ssbxfsrm/p/17541658.html

相关文章

  • @Transactional注解使用事务
    一、事务的传播行为PROPAGION_XXX:事务的传播行为保证同一个事务中PROPAGATION_REQUIRED支持当前事务,如果不存在就新建一个(默认)PROPAGATION_SUPPORTS支持当前事务,如果不存在,就不使用事务PROPAGATION_MANDATORY支持当前事务,如果不存在,抛出异常保证没有在同一个事务......
  • 使用Redis时的vm.overcommit_memory内存分配控制
    最近在使用Redis的时候遇到了linux系统中的vm.overcommit_memory参数设置,对此不是很了解,于是研究了一下,有了本文。 ===================================== 一个尝试,如何在内存中申请空间:>>>100000*400000*8/1024/1024/1024298.0232238769531 实际代码:importnumpyasnpx=np......
  • 分布式事务
    一、分布式基础        1、分布式事务:        2、CAP理论:        3、BASE理论:   使用分布式事务的原则:不用分布式事务最好。如何无法不得不用,则考虑业务出错的频率,频率低,可以走人工补偿,频率高则引入分布式事务。   ......
  • spring中的@Transactional声明式事务
     1与编程式事务区别1.1声明式事务使用@Transactional注解来实现事务创建的,spring会为加了事务配置的类创建一个代理对象,基于动态代理,通过其中参数来控制事务的传播、事务回滚等。加在类上相当于给类中所有方法都添加事务。使用声明式事务的好处是使用简单,减少很多像是开......
  • 基于redis的分布式锁
     1为什么要使用分布式锁的理解分布式架构图:例1:在电商业务采用分布式架构后,程序部署在3个tomcat容器中(1个tomcat容器代表一个服务器,3个tomcat可理解在北京上海深圳都有部署电商服务),成员变量A代表商品数量。在北京的Alice,上海的Bob,深圳的Tom,都分别发起了购买或取消iPhone12......
  • Redis 面试要点
    一、Redis主从服务器和集群服务器区别? 1)架构不同:Redis集群采用分布式储存模式,多节点同时提供读写服务,可横向扩展;   而Redis主从只有一个master节点,多个slave节点,只有master节点提供读写服务;2)数据完整性:Redis集群中如果任何一个节点故障,其它节点可以正常提供服务,保......
  • spring-data-redis2.3.9不支持redis6.2提供的GEOSEARCH命令
    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><exclusion><groupId>io.lettuce</groupId>......
  • Redis事务和持久化机制
    Redis031Redis事务Redis通过multi、exec、watch等命令实现事务功能。Redis的事务功能相对较弱,无法和关系型数据库的事务相媲美。1.1multi和exec命令语法:multi开始事务命令1命令2...exec 执行事务示例:127.0.0.1:6379>multi //开始事务OK127......
  • redis雪崩问题解决
    缓存雪崩出现的场景缓存服务器宕机,没有设置持久化介绍:缓存服务器宕机,没有设置持久化,导致缓存数据全部丢失,请求全部转发到数据库,造成数据库短时间内承受大量请求而崩掉。缓存集中失效缓存的key设置了相同的过期时间,导致在某一时刻,大量的key同时失效,请求全部转发到数据库,造成......
  • Redis基本部署和使用​
    redis是什么Redis是现在最受欢迎的NoSQL数据库之一,Redis是一个使用ANSIC编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库。redis的优势高性能读取和写入数据、支持丰富的数据类型、数据原子性、支持分布式,理论上可以无限扩展、支持数据备份功能......