首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Redis | Redis 的事务一

在 Redis 中同样也有事务的功能,我整理了 Redis 关于事务的命令和一些简单的说明,让我们看看 Redis 的事务。...命令介绍 Redis 关于事务的命令只有简单的几个,如下图: ? 可以看到 Redis 关于事务的命令只有 5 条。下面来分别介绍一下这几条命令。...Redis 的事务支持 原子性 和 隔离性,当事务开始执行时,事务队列中的命令会一次性执行完成,不会被其他的命令打断,从而可以它拥有原子性;当我们对一个 key 进行修改操作时,另外一个客户端也对 key...Redis 的事务不支持回滚,当事务开始执行时(即执行了 exec 命令),事务就会将所有的命令执行完成,除非在 multi 命令后错误的输入了一条不存在的命令,此时执行 exec 命令时不会执行事务中的命令...总结 Redis 的提供了对事务的支持,由于 Redis 本身的特性,因此对于事务的支持较弱,它不支持回滚。

26030
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Redis | Redis 的事务二

    遗留问题 上篇关于整理 Redis 事务的文章中遗留了一个问题,当一个客户端对一个 key 进行修改操作时,另外一个客户端也修改了同一个 key 导致数据产生了问题。...上篇文章的地址是:Redis | Redis 的事务一 来回忆一下上次的问题。...如果 Redis 开启了 AOF,那么,使用 Redis 提供的一个 redis-check-aof 工具,使用该工具对 AOF 文件进行检查,该工具可以移除不完整的事务命令,从而保证数据的一致性。...而如果开启了 RDB,但是在事务执行的时候,Redis 不会进行 RDB 快照,那么事务执行完成后发生了宕机,但是宕机之前 Redis 仍然没有到到达 RDB 的时间,那么此次的修改将不会被持久化。...总结 Redis 通过 watch 来保证了事务之间的隔离性,从而避免了多个客户端在修改同一个 key 时产生问题。

    29430

    Redis 的事务

    针对这四个性质,Redis做了如下内容: 原子性 对于Redis的事务功能来说,事务队列中的命令要么就全部执行,要么就一个都不执行,因此,Redis的事务时具有原子性的。...Redis事务和关系型数据库事务的最大区别在于,Redis不支持事务回滚机制(作者觉得不符合Redis的定位),即使事务队列中某个命令执行期间出现了错误,整个事务也会继续执行下去,命令错误有三种情况:...事务的一致性收到错误命令和实例故障的影响: 命令入队时报错,Redis会放弃事务执行,数据库是一致的; 命令入队时没报错,实际执行时报错,有错误的命令不会执行,正确的命令正常执行,数据库也是一致的; EXEC...由于Redis的乐观锁机制,保证了并行状态下的事务执行隔离性,如果并发操作在EXEC命令之后被服务端执行,那么久相当于单线程操作,也是保证隔离性的。...但对于Redis来说,无论是否开启RDB或者AOF的情况下,都会存在数据丢失的情况,所以无法保证事务的持久性。

    28010

    【Redis】Redis 事务和事务锁

    一、事务简介 Redis执行指令过程中,多条连续执行的指令被干扰,打断,插队,这多条连续指令执行的结果可能就会有问题 由于客户端2中断了客户端1两条连续的指令执行,导致客户端1获取到itcast redis...一个队列中,一次性、顺序性、排他性的执行一系列命令 二、事务基本指令 multi:设定事务的开启位置,此指令执行后,后续的所有指令均加入到事务中 exec:设定事务的结束位置,同时执行事务,与multi...:  放弃执行队列中的指令,直接销毁队列,返回执行结果 四、事务中指令出错处理 开启事务后,如果放入队列的指令存在语法错误,将会执行discard,当前事务队列会被销毁 开启事务后,如果放入队列的指令并没有语法错误...我们对需要操作的数据添加监视锁并开启事务,如果exec前监视的数据被修改了,那说明我放入事务队列的指令想要操作的数据被修改了,那这些指令操作的结果就不满足我的预期了。...这种情况下,我们使用分布式锁解决(redis并不提供这种特殊的锁,只是我们利用setnx的特性解决此业务场景,这并不像MySQL的排它锁,上了锁就不能操作指定数据,此处redis所谓的锁只是我们约好的先操作某个变量再操作对应数据

    18421

    Redis事务

    一.使用Redis-Cli执行事务   1.概念 和其它数据库一样,Redis作为NoSQL数据库也同样提供了事务机制。...在Redis中,MULIT,EXEC,DISCARD,WATCH这个四个命令是实现事务的基石,Redis中事务的实现特征     1.在事务中的所有命令都将被串行化的顺序执行,事务执行期间,Redis不会再为其它客户端的请求提供任何服务...,从而保证了事务中的所有命令被原子的执行     2.和关系型数据库中事务相比,在Redis事务中如果由某一条命令执行失败,其后的命令仍然会被继续执行     3.可以通过MULTI命令开启一个事务,其可以理解为关系性数据库中的...此时只要充分利用Redis工具包中提供的redis-check-aof工具,该工具客户帮助定位到数据不一致的错误,并将已经写入的部分进行回滚。修复后就可以再次重新启动Redis服务器了。...从上面代码看出第二条命令失败了,但是它并没有影响其它命令的执行,这一点也是Redis的事务与关系数据库中的事务最为重要的差别 3.回滚事务 ?

    72820

    【Redis】事务

    前言: 对比MySQL事务:【MySQL篇】事务的认识以及四大特性-CSDN博客 弱化的原子性: redis 没有 "回滚机制". 只能做到这些操作 "批量执行"....MySQL 的⼀致性体现的是运行事务前和运行后 , 结果都是合理有效的, 不会出现中间非法状态. 不需要隔离性: 也没有隔离级别, 因为不会并发执行事务 (redis 单线程处理请求) ....不需要持久性: 是保存在内存的. 是否开启持久化, 是redis-server 自己的事情, 和事务无关....Redis的事务没有像MySQL那么全,它主要的意义将操作“打包”成一个整体,避免其他客户端的命令,插队到中间~ Redis实现事务,是在里面引入了一个队列(每个客户端都有) 当开启事务的时候,客户端输入命令...,就会发送到服务器并且命令进入队列中,并不是立即执行,而是遇到执行事务的命令时候,这时会把队列里面的命令按照顺序依次执行~ 因此, Redis 的事务的功能相比于 MySQL 来说, 是弱化很多的.

    5200

    Redis 事务

    事务相关命令 MULTI 自1.2.0可用。 **时间复杂度:**O(1)。 语法:MULTI 说明: 标记一个事务块的开始。...因为 EXEC 命令会执行事务,因此 WATCH 命令的效果已经产生了;而 DISCARD 命令在取消事务的同时也会取消所有对 key 的监视,因此这两个命令执行之后,就没有必要执行 UNWATCH 了...示例: 在之后的 EXEC 命令中会详细介绍。 EXEC 自1.2.0可用。 时间复杂度:事务块内所有命令的时间复杂度的总和。 语法:DISCARD 说明: 执行所有事务块内的命令。...返回值: 事务块内所有命令的返回值,按命令执行的先后顺序排列。 当操作被打断时,返回空值 nil 。...Redis 提供了简单的事务,之所以说它简单,主要是因为它不支持事务中的回滚特性,同时无法实现命令之间的逻辑关系计算,当然也体现了 Redis 的 “keep it simple” 的特性。

    41830

    Redis事务

    , 22 1月 2022 作者 847954981@qq.com 后端学习, 我的编程之路 Redis事务 当你想做一个抢购程序,利用原始的if语句来实现,会发现显示抢购成功的数量大于预定值。...Redis事务可以保证只有在执行玩玩事务中的所有命令后,才会继续处理此客户端的其他命令。 也就是说只有一个用户可以操作事务当中的数据。...redis中事务从开始到结束经历三个阶段: redis事务存在四个指令:multi、exec、discard、watch multi 开启一个事务 exec 执行一个事务 discard 取消一个事务...operations.watch(id); } }); 其中watch()内传入待监视的Redis数据的Key。...事务开启后执行的每个操作,如果成功则放入 true 值作为标记,操作失败则不放入结果标记。 有几个操作就有几个结果标记。因为本演示案例,Redis 只有一个设置库存的操作,所以只有一个标记。

    56850

    鸡肋的Redis事务

    没错,Redis也有事务管理,但是功能很简单,在正式开发中也并不推荐使用。但是面试中有可能会问到,所以本文简单谈一谈Redis的事务。 通过这篇文章,你会了解 Redis为什么要提供事务?...Redis事务基本指令和使用方法 CAS乐观锁是什么? Redis事务为什么不支持回滚? 1. 为什么要用事务 我们知道Redis的单个命令是原子性的,比如get、set、mget、mset等指令。...为此Redis提供了WATCH的指令,该指令可以为Redis事务提供CAS乐观锁行为,即多个连接同时更新变量的时候,会和变量的初始值进行比较,只在这个变量的值没有被修改的情况下才会更新成新的值。...这种方式显然不符合我们对原子性的定义,也就是Redis的事务无法实现原子性,无法保证数据一致。 针对这种缺陷,Redis官方也是做了说明的。 4....这可能就是不推荐使用Redis事务的原因了吧,鸡肋是一方面,万一被官方打脸了呢?所以Redis事务的知识稍微了解一下就好,面试被问到能回到上来就可以了。

    32710

    redis事务

    redis事务 本文记录一些redis事务相关的原理。 1、基本概念 1)什么是redis的事务?...简单理解,可以认为redis事务是一些列redis命令的集合,并且有如下两个特点: a)事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。...3)redis事务的错误 使用事务时可能会遇上以下两种错误: a)入队错误:事务在执行 EXEC 之前,入队的命令可能会出错。...2、redis事务的用法 redis事务是通过MULTI,EXEC,DISCARD和WATCH四个原语实现的。 MULTI命令用于开启一个事务,它总是返回OK。...当遇到执行错误时,redis放过这种错误,保证事务执行完成。 这里要注意此问题,与mysql中事务不同,在redis事务遇到执行错误的时候,不会进行回滚,而是简单的放过了,并保证其他的命令正常执行。

    46310

    Redis 事务

    Redis事务允许在单步中执行一组命令,它们围绕命令MULTI、EXEC、DISCARD和WATCH展开。Redis事务提供两个重要保证: •事务中的所有命令都被序列化并按顺序执行。...其他客户端发送的请求永远不会在Redis事务执行过程中被处理。这保证了命令作为单一隔离操作执行。...Redis不支持事务回滚,因为支持回滚会对Redis的简单性和性能产生重大影响。 丢弃命令队列 DISCARD可用于中止事务。在这种情况下,不会执行任何命令,连接的状态将恢复为正常。...需要注意的是: •在Redis 6.0.9之前的版本中,过期的键不会导致事务中止。更多相关信息[5]•事务中的命令不会触发WATCH条件,因为它们只会在发送EXEC之前排队。 WATCH可以多次调用。...Redis脚本与事务 在Redis中进行类似事务操作时,需要考虑的另一个问题是事务性的Redis脚本[7]。用Redis事务做任何事情,你都也可以用脚本来做,而且通常脚本会更简单更快。

    8910

    Redis 事务

    在关系型数据库中的事务一定要满足原子性,一致性,隔离性和持久性4个特性; 但Redis中的事务却与pipeline批量命令操作更像....key1值的变化不能正常执行; 保证了事务的原子性. 127.0.0.1:6379> exec (nil) 127.0.0.1:6379> get key1 "v1" 127.0.0.1:6379> get...> unwatch OK 127.0.0.1:6379> 综上可见: redis的事务本身并不是原子性,在使用时需要配合watch命令; 在命令出错情况下,事务是会回滚的;在命令参数出错时,事务是不会回滚的...,会继续执行后续命令; 因为lua脚本的原子性,redis事务也可以使用lua脚本代替....与pipeline类似,都是命令的批量操作,但pipeline关注的是减少RTT时间,而事务关注的是一致性,从性能上来说pipeline性能更高些; 在集群环境中执行时,数据不一定都在一台服务器中,很容易造成分布式事务不一致

    30511

    redis事务

    今天我们讲redis,重点是说一下redis基本概念和使用和事物 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统...字符串 这是最简单Redis类型。如果你只用这种类型,Redis就像一个可以持久化的memcached服务器(注:memcache的数据仅保存在内存中,服务器重启后,数据将丢失). ?...事务可以一次执行多个命令, 并且带有以下两个重要的保证:事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。...事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。 一个事务从开始到执行会经历以下三个阶段: 开始事务。 命令入队。...multi标记一个事务块的开始 exec执行所有事务块内的命令 127.0.0.1:6379> multi OK 127.0.0.1:6379> set hello kitty QUEUED 127.0.0.1

    55810

    Redis的事务机制

    一、Redis事务的相关命令: 1、MULTI: 用于标记事务块的开启。MULTI执行之后,Redis会将后续的命令逐个放到一个缓存队列中,当EXEC命令被调用时,所有队列中的命令才会被原子化执行。...二、Redis事务原理: 1、事务的定义: Redis的事务本质是一组命令的集合,一个事务中的命令要么全部执行,要么都不执行。...事务的原理是先将属于一个事务的命令发送给Redis,存放到一个队列中,再让Redis依次执行这些命令。如果在发送EXEC命令前客户端断线了,则Redis会清空事务队列,事务中的所有命令都不会执行。...除此之外,Redis的事务还能保证一个事务内的命令依次执行而不被其他命令插入。...2、Redis事务的特性: (3)原子性:Redis的原子性只能保证批量操作的一次性执行,和传统mysql事务不同的是,Redis不支持回滚,在执行EXEC命令时,如果Redis事务中某条命令执行失败,

    46220

    Redis事务

    Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证: 批量操作在发送 EXEC 命令前被放入队列缓存。...收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。...),事务中的所有命令都不会被执行 运行时异常,如果事务队列中存在语法性,那么执行命令时,其他命令是可以正常运行的,错误命令抛出异常 监控 watch 悲观锁 乐观锁 Redis 测试监视测试 127.0.0.1...DECRBY money 20 QUEUED 127.0.0.1:6379> INCRBY out 20 QUEUED 127.0.0.1:6379> exec 测试多线程修改值,使用watch可以当作redis...(nil) 如果修改失败,获取最新的值就好 图片

    25011

    Redis事务

    认识redis事务 说起事务,会不由自主地想起MySQL中的事务,MySQL中的事务有四个性质: ①原子性:把多个操作,打包成一个整体,要么全都执行成功,要么全都不执行。...注意:这里跟MySQL事务中的原子性相比,redis原子性不管这些操作有没有成功,它不管!如果事务中有些操作失败了,redis说失败就失败吧。而MySQL则不行,一旦有操作失败,则全部回滚!...③不需要隔离性:Redis是一个单线程模型的服务器程序,所有请求/事务,都是"串行"执行的 ④不需要持久性:redis数据是保存在内存的.是否开启持久化,是redis-server自己的事情,和事务⽆关...,主线程才去将队列中的操作依次执行,因此,Redis事务的意义,便是:避免客户端后来的命令插队,并不会去保证执行得对不对。...redis正是因为MySQL的空间时间开销大的问题,才制定出来的。 而redis事务的场景:超卖问题。 操作事务 开启事务 MULTI 开启一个事务,执行成功返回OK。

    8910

    Redis事务

    Redis 事务简介 Redis 事务的基本功能由 MULTI、EXEC、DISCARD 及 WATCH 等命令实现。其中, ● MULTI 命令用于启动 Redis 的事务,将客户端置为事务状态。...Redis事务本质是一组命令的集合,Redis服务器先序列化这一组命令,然后一次性、按顺序、排他性地串行(逐个)执行这一组命令,并且不会在执行事务的途中去执行其他客户端命令。...结果的输出顺序与开启事务后命令进入队列的先后顺序一致。 然而 Redis 数据库并不支持事务回滚。向Redis事务队列中插入命令,如果遇到命令格式错误,入队失败,则会导致整个事务执行失败。...在执行事务的过程中,服务器可以保证这个事务不会被中断,所以 Redis 事务总是以串行方式实现的,在上一个事务没有执行完之前,其他命令是不会被执行的,这就是 Redis 事务的隔离性。...在执行事务的过程中,服务器可以保证这个事务不会被中断,所以 Redis 事务总是以串行方式实现的,在上一个事务没有执行完之前,其他命令是不会被执行的,这就是 Redis 事务的隔离性。

    42020

    Redis 事务

    Redis 事务 Redis 事务可以一次执行多个命令,并且带有以下三个重要的保证: 批量操作在发送EXEC命令前被放入队列缓存。...收到EXEC命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。...实例 以下是一个事务的例子,它先以MULTI开始一个事务,然后将多个命令入队到事务中,最后由EXEC命令触发事务,一并执行事务中的所有命令: [root@localhost ~]# redis-cli...命令的执行是原子性的,但Redis没有在事务上增加任何维持原子性的机制,所以Redis事务的执行并不是原子性的。...Redis 事务命令 下表列出了Redis事务的相关命令: 序号 命令及描述 1 DISCARD取消事务,放弃执行事务块内的所有命令。 2 EXEC执行所有事务块内的命令。

    27220

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券