iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >redis中事务命令的介绍和使用
  • 605
分享到

redis中事务命令的介绍和使用

2024-04-02 19:04:59 605人浏览 薄情痞子
摘要

这篇文章将为大家详细讲解有关Redis中事务命令的介绍和使用,文章内容质量较高,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、概述:Redis 事务的本质是一组命令的集合。事务支持一次执

这篇文章将为大家详细讲解有关Redis事务命令的介绍和使用,文章内容质量较高,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

一、概述:

Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。

总结说:redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。

二、相关命令列表:

命令原型时间复杂度命令描述返回值

M

U

L

T

I


用于标记事务的开始,其后执行的命令都将被存入命令队列,直到执行EXEC时,这些命令才会被原子的执行。始终返回OK

E

X

E

C


执行在一个事务内命令队列中的所有命令,同时将当前连接的状态恢复为正常状态,即非事务状态。如果在事务中执行了WATCH命令,那么只有当WATCH所监控的Keys没有被修改的前提下,EXEC命令才能执行事务队列中的所有命令,否则EXEC将放弃当前事务中的所有命令。原子性的返回事务中各条命令的返回结果。如果在事务中使用了WATCH,一旦事务被放弃,EXEC将返回NULL-multi-bulk回复。

D

I

S

C

A

R

D


回滚事务队列中的所有命令,同时再将当前连接的状态恢复为正常状态,即非事务状态。如果WATCH命令被使用,该命令将UNWATCH所有的Keys。始终返回OK。

W

A

T

C

H

k

e

y

[key ...]

O(1)在MULTI命令执行之前,可以指定待监控的Keys,然而在执行EXEC之前,如果被监控的Keys发生修改,EXEC将放弃执行该事务队列中的所有命令。始终返回OK。

U

N

W

A

T

C

H

O(1)取消当前事务中指定监控的Keys,如果执行了EXEC或DISCARD命令,则无需再手工执行该命令了,因为在此之后,事务中所有被监控的Keys都将自动取消。始终返回OK。

三、命令示例:

1、事务被正常执行:
#在shell命令行下执行Redis的客户端工具

 /> redis-cli

#在当前连接上启动一个新的事务。

redis 127.0.0.1:6379> multi
OK

#执行事务中的第一条命令,从该命令的返回结果可以看出,该命令并没有立即执行,而是存于事务的命令队列。

redis 127.0.0.1:6379> incr t1
QUEUED

#又执行一个新的命令,从结果可以看出,该命令也被存于事务的命令队列。

redis 127.0.0.1:6379> incr t2
QUEUED

#执行事务命令队列中的所有命令,从结果可以看出,队列中命令的结果得到返回。

redis 127.0.0.1:6379> exec
1) (integer) 1
2) (integer) 1

2、 事务中存在失败的命令:
#开启一个新的事务。

redis 127.0.0.1:6379> multi
OK

#设置键a的值为string类型的3。

redis 127.0.0.1:6379> set a 3
QUEUED

#从键a所关联的值的头部弹出元素,由于该值是字符串类型,而lpop命令仅能用于List类型,因此在执行exec命令时,该命令将会失败。

redis 127.0.0.1:6379> lpop a
QUEUED

#再次设置键a的值为字符串4。

redis 127.0.0.1:6379> set a 4
QUEUED

#获取键a的值,以便确认该值是否被事务中的第二个set命令设置成功。

redis 127.0.0.1:6379> get a
QUEUED

#从结果中可以看出,事务中的第二条命令lpop执行失败,而其后的set和get命令均执行成功,这一点是Redis的事务与关系型数据库中的事务之间最为重要的差别。
redis 127.0.0.1:6379> exec
1) OK
2) (error) ERR Operation against a key holding the wrong kind of value
3) OK
4) "4"
3、回滚事务:
#为键t2设置一个事务执行前的值。

redis 127.0.0.1:6379> set t2 tt
OK

#开启一个事务。

redis 127.0.0.1:6379> multi
OK

#在事务内为该键设置一个新值。

redis 127.0.0.1:6379> set t2 ttnew
QUEUED

#放弃事务。

redis 127.0.0.1:6379> discard
OK

#查看键t2的值,从结果中可以看出该键的值仍为事务开始之前的值。

redis 127.0.0.1:6379> get t2
"tt"

四、WATCH命令和基于CAS的乐观锁:

在Redis的事务中,WATCH命令可用于提供CAS(check-and-set)功能。假设我们通过WATCH命令在事务执行之前监控了多个Keys,倘若在WATCH之后有任何Key的值发生了变化,EXEC命令执行的事务都将被放弃,同时返回Null multi-bulk应答以通知调用者事务执行失败。

例如,我们再次假设Redis中并未提供incr命令来完成键值的原子性递增,如果要实现该功能,我们只能自行编写相应的代码。其伪码如下:

      val = GET mykey
      val = val + 1
      SET mykey $val

以上代码只有在单连接的情况下才可以保证执行结果是正确的,因为如果在同一时刻有多个客户端在同时执行该段代码,那么就会出现多线程程序中经常出现的一种错误场景--竞态争用(race condition)。

比如,客户端A和B都在同一时刻读取了mykey的原有值,假设该值为10,此后两个客户端又均将该值加一后set回Redis服务器,这样就会导致mykey的结果为11,而不是我们认为的12。为了解决类似的问题,我们需要借助WATCH命令的帮助,见如下代码:

      WATCH mykey
      val = GET mykey
      val = val + 1
      MULTI
      SET mykey $val
      EXEC

和此前代码不同的是,新代码在获取mykey的值之前先通过WATCH命令监控了该键,此后又将set命令包围在事务中,这样就可以有效的保证每个连接在执行EXEC之前,如果当前连接获取的mykey的值被其它连接的客户端修改,那么当前连接的EXEC命令将执行失败。这样调用者在判断返回值后就可以获悉val是否被重新设置成功。

以上就是redis中事务命令的介绍和使用,看完之后是否有所收获呢?如果想了解更多相关内容,欢迎关注编程网数据库,感谢各位的阅读。

您可能感兴趣的文档:

--结束END--

本文标题: redis中事务命令的介绍和使用

本文链接: https://www.lsjlt.com/news/38260.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 关于redis命令的详细介绍
    小编给大家分享一下关于redis命令的详细介绍,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!              &...
    99+
    2024-04-02
  • linux上rz和sz命令使用介绍
    本篇内容主要讲解“linux上rz和sz命令使用介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux上rz和sz命令使用介绍”吧!与ssh有关的两个命令可以提供很方便的操作: sz:将选...
    99+
    2023-06-13
  • .NetCoreSDK命令介绍及使用
    dotnet run 介绍 dotnet 相关命令是属于 .NET Core command-line (CLI) 的一部分,Microsoft 为我们提供了这个命令行工具以供我们在...
    99+
    2024-04-02
  • Linux less 命令使用介绍
    文章目录 1.命令格式2.命令功能3.命令参数4.按键操作5.示例1、查看文件内容2、ps查看进程信息并通过less分页显示3、查看命令历史使用记录并通过less分页显示5、浏览多个文件 ...
    99+
    2023-09-14
    linux 运维 ubuntu less 服务器
  • Linux系统中sed命令的使用介绍
    本篇内容主要讲解“Linux系统中sed命令的使用介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux系统中sed命令的使用介绍”吧!sed是linux轻量级流编辑器,用于行的操作,主要...
    99+
    2023-06-13
  • Linux系统中cut命令的使用介绍
    本篇内容主要讲解“Linux系统中cut命令的使用介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux系统中cut命令的使用介绍”吧!执行权限:所有用户所在位置:/usr/bin/cut...
    99+
    2023-06-12
  • Shell脚本中的echo命令使用介绍
    目录引言1.显示普通字符串:2.显示转义字符3.显示变量4.显示换行5.显示不换行6.显示结果定向至文件7.原样输出字符串,不进行转义或取变量(用单引号)8.显示命令执行结果引言 Shell 的 echo 指令与 ph...
    99+
    2023-05-12
    Shell脚本echo命令 Shell脚本命令
  • Linux系统中split命令的使用介绍
    本篇内容主要讲解“Linux系统中split命令的使用介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux系统中split命令的使用介绍”吧!位置:/usr/bin/split权限:所有...
    99+
    2023-06-13
  • redis的list数据类型相关命令介绍及使用
    目录list列表简介常用命令添加命令查询命令弹出/删除命令修改命令阻塞弹出命令应用场景list列表简介 list是简单的字符串列表(说通俗点,存储的还是字符串),按照插入顺序排序。你...
    99+
    2024-04-02
  • openvswitch的原理和常用命令介绍
    本篇内容介绍了“openvswitch的原理和常用命令介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一.Openvswitch工作原理 ...
    99+
    2023-06-19
  • Linux中的grep命令介绍
    本篇内容介绍了“Linux中的grep命令介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Linux 最重要的三个命令在业界被称为三剑客,...
    99+
    2023-06-15
  • linux中sed命令的用法介绍
    本篇内容介绍了“linux中sed命令的用法介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!sed命令行格式为:  &...
    99+
    2023-06-13
  • 详细介绍Linux telnet命令的使用
    这篇文章给大家分享的是有关详细介绍Linux telnet命令的使用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。用户使用telnet命令进行远程登录。该命令允许用户使用telnet协议在远程计算机之间进行通信,...
    99+
    2023-06-16
  • mysqlshow命令的用法介绍
    MySQL自带的mysqlshow命令,可以让我们在不连接到MySQL客户端的情况下查看MySQL的一些参数、数据库、表、列、索引等信息,其使用方法如下: 查看都有哪些库:mysqlshow -...
    99+
    2024-04-02
  • Node.js中npx命令的用法及使用场景介绍
    这篇文章主要介绍“Node.js中npx命令的用法及使用场景介绍”,在日常操作中,相信很多人在Node.js中npx命令的用法及使用场景介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Node.js中npx...
    99+
    2023-06-20
  • hbase shell基础和常用命令介绍
    这篇文章主要介绍“hbase shell基础和常用命令介绍”,在日常操作中,相信很多人在hbase shell基础和常用命令介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”hbase shell基础和常用命...
    99+
    2023-06-09
  • Linux xargs命令的用法介绍
    本篇内容介绍了“Linux xargs命令的用法介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!xargs 是给命令传递参数的一个过滤器,...
    99+
    2023-06-05
  • DBA常用的linux命令介绍
    这篇文章主要介绍“DBA常用的linux命令介绍”,在日常操作中,相信很多人在DBA常用的linux命令介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”DBA常用的linux命令介绍”的疑惑有所帮助!接下来...
    99+
    2023-06-06
  • linux环境中常用的mysql命令介绍
    进入mysql命令: mysql -u+(用户名) -p+(密码 ) mysql语句命令后面一定要加“;” 查询库名: show databases; 修改库: ...
    99+
    2024-04-02
  • Linux系统中strace命令的用法介绍
    这篇文章主要讲解了“Linux系统中strace命令的用法介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux系统中strace命令的用法介绍”吧!在调试的时候,strace能帮助你...
    99+
    2023-06-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作