Redis事务

这篇具有很好参考价值的文章主要介绍了Redis事务。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

是什么

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

能干嘛

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

Redis事务和数据库事务的区别

  1. 单独的隔离操作

    Redis的事务仅仅是保证事务里的操作会被连续独占的执行,redis命令执行是单线程架构,在执行完事务内所有指令前是不可能再去同时执行其他客户端的请求的

  2. 没有隔离级别的概念

    因为事务提交前任何指令都不会被实际执行,也就不存在”事务内的查询要看到事务里的更新,在事务外查询不能看到”这种问题了

  3. 不保证原子性

    Redis的事务不保证原子性,也就是不保证所有指令同时成功或同时失败,只有决定是否开始执行全部指令的能力,没有执行到一半进行回滚的能力

  4. 排他性

    Redis会保证一个事务内的命令依次执行,而不会被其它命令插入

常用命令

  • DISCARD:取消事务,放弃执行事务块内的所有命令。

  • EXEC:执行所有事务块内的命令。

  • MULTI:标记一个事务块的开始。

  • UNWATCH:取消WATCHMINGLING 对所有key的监视。

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

案例

  • 正常执行

    Redis事务

     

  • 放弃事务

    Redis事务

  • 全体连坐

    Redis事务

  • 冤头债主(注意和传统数据库的区别,不一定要么一起成功要么一起失败)

    Redis事务

  • watch监控

    • redis使用watch来提供乐观锁定,类似于CAS(check-and-set)

    • watch:

      • 初始化k1和balance两个key,先监控再开启multi,保证两key变动在同一个事物内

      Redis事务

      • 加塞篡改

        watch命令是一种乐观锁的实现,Redis在修改的时候会检测数据是否被更改,如果更改了,则执行失败第一个窗口蓝色框第5步执行结果返回为空,也就是相当于是失败

        Redis事务

       

    • unwatch:

      Redis事务

    • 小结:

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

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

小总结

开启:MULTI开启一个事物。

入队:将多个命令入队到事务中,接到这些命令并不会立即执行,而是放到等待执行的事物队列里面。

执行:由EXEC命令触发事物。文章来源地址https://www.toymoban.com/news/detail-776790.html

到了这里,关于Redis事务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 多个hackrf one可以做什么科研

    多实验台测量系统 可将多个hackRF连接成分布式测量系统,从不同位置同时收集信号数据。 多输入多输出模型测试 以多个发射器和接收器构建MIMO环境,测试通信算法和通道模型。 噪声提取与分离 通过多天线收集数据,利用空间信息抽取和分离不同信号中的噪声成分。 细小信号检

    2024年02月07日
    浏览(43)
  • MobaXterm多个窗口同时执行shell命令

    项目中需要两个系统时间同步,我想自己简单的测试下程序是不是正常,最直观的想法是同时在两个系统里执行date命令,看两个命令的差值是不是在合理范围之内 所以简单记录下使用MobaXterm远程连接服务器时,在两个窗口中同时执行shell命令的操作步骤 开启两个tab,分别s

    2024年02月11日
    浏览(57)
  • 多个安全厂商安全设备 远程命令执行漏洞复现

    此文章仅用于技术交流,严禁用于对外发起恶意攻击!!! 该漏洞可执行远程代码 FOFA:body=“/webui/images/default/default/alert_close.jpg”

    2024年02月03日
    浏览(47)
  • `sh -c`命令——解决命令权限问题、一条命令中执行多个指令

    sh -c 在Shell中执行一个字符串作为命令,可以在一条命令中执行多个指令。 其中, command 是要执行的命令或命令串。 **1、 sh -c 属于非交互模式 在终端上敲入命令就可以显示对应结果,这样与终端进行交互执行命令的方式就称为交互模式。 非交互模式就是调用 bash 解释器,通

    2024年03月12日
    浏览(47)
  • 2023-06-09:什么是Redis事务?原理是什么?

    2023-06-09:什么是Redis事务?原理是什么? 答案2023-06-09: Redis中的事务是以一组命令的形式出现的,这些命令被认为是最小的执行单位。事务可以保证在一个单独独立的隔离操作中执行所有命令,而且所有命令都会按照指定的顺序经过序列化后被执行。在服务端执行事务的过

    2024年02月08日
    浏览(101)
  • redis事务对比Lua脚本区别是什么

    redis官方对于lua脚本的解释:Redis使用同一个Lua解释器来执行所有命令,同时,Redis保证以一种原子性的方式来执行脚本:当lua脚本在执行的时候,不会有其他脚本和命令同时执行,这种语义类似于 MULTI/EXEC。从别的客户端的视角来看,一个lua脚本要么不可见,要么已经执行完

    2024年02月12日
    浏览(42)
  • 使用批处理文件(.bat)启动多个CMD窗口并执行命令

    由于每次启动本机的kafka都需要打开2个cmd窗口,分别启动zookeeper服务和kafka服务,操作相对繁琐,于是想起了批处理来帮忙一键启动。 在桌面新建一个txt文件,改后缀名为.bat,并加上下面的代码。 代码结尾不加pause的原因是,执行完关闭窗口,因为不需要该窗口保留着,免得

    2024年02月16日
    浏览(51)
  • 在shell脚本中切换用户之后再执行多个函数以及执行多行命令的方法和遇到的问题

    其中,username是您要切换到的用户的用户名,function1和function2是您要执行的函数名称,您可以根据需要添加更多函数和命令。在EOF标记之间的所有内容都将作为切换后的用户执行。请注意,您需要确保切换后的用户具有执行所需命令和函数的权限。 其中,username为要切换到的

    2024年02月04日
    浏览(94)
  • java实现连接远程服务器,并可以执行shell命令

    你可以使用Java中的SSH库来连接远程服务器并执行shell命令。下面是一个简单的示例代码: 请注意替换 your_host , your_username , your_password 和 your_shell_command 为实际的远程服务器信息和要执行的shell命令。该示例代码使用JSch库来建立SSH连接并执行命令。

    2024年01月20日
    浏览(65)
  • 全局变量可不可以定义在可被多个.C⽂件包含的头⽂件中?为什么?

            全局变量可不可以定义在可被多个.C⽂件包含的头⽂件中?为什么?         全局变量可以定义在可被多个 .C 文件包含的头文件中。         在 C 语言中,头文件通常用于声明函数、变量、结构体等,以供多个 .C 文件共享。当你将全局变量定义在头文件中

    2024年01月18日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包