首页 > 数据库 >Redis-03 Redis事务

Redis-03 Redis事务

时间:2023-01-04 23:22:25浏览次数:39  
标签:03 事务 127.0 命令 0.1 Redis 6379 key

需要特别注意,Redis 的命令是原子性的,而 Redis 的事务是非原子性的

事务相关命令

MULTI 命令

开启事务命令,Redis将操作命令逐个放到队列中,根据EXEC命令来原子化执行命令

EXEC 命令

执行事务中的所有操作命令

DISCARD 命令

取消事务命令,放弃执行事务模块中的所有命令

WATCH 命令

监视一个 key 或者多个 key 如果在事务执行前,这些 key 被其他命令修改,则事务被中断,不会执行事务中的任何命令

UNWATCH 命令

取消 WATCH 命令对所有 key 的监控

事务流程

正常事务流程

使用MULTI 命令开启一个事务,并且使用 set 命令新建两个字符串键 key1key2,初始值分别为 val1val2

127.0.0.1:6379> set key1 val1
OK
127.0.0.1:6379> set key2 val2
OK

然后我们使用一个事务来修改两个 key 的值,命令为

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set key1 new_val1
QUEUED
127.0.0.1:6379> set key2 new_val2
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) OK

最后我们使用get命令来查询我们修改的键

127.0.0.1:6379> get key1
"new_val1"
127.0.0.1:6379> get key2
"new_val2"
127.0.0.1:6379>

可以看到外面已经修改了两个键的值

语法错误导致事务失败流程

在事务开启后,其中某一条命令因为 redis 语法错误导致整个事务提交失败,key 的值不会发生改变

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> set key1 new_val1
QUEUED
127.0.0.1:6379(TX)> sets key2 new_val2
(error) ERR unknown command `sets`, with args beginning with: `key2`, `new_val2`,
127.0.0.1:6379(TX)> EXEC
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> get key1
"val1"
127.0.0.1:6379> get key2
"val2"

数据类型错误导致事务失败流程

在事务开启后,其中某一条命令因为 redis 数据类型错误导致整个事务提交失败,发生类型错误的命令的 key 的值不会发生改变,但是其他 key 会发生变化

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> set key1 val1
QUEUED
127.0.0.1:6379(TX)> lpush key2 val2
QUEUED
127.0.0.1:6379(TX)> EXEC
1) OK
2) (error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> get key1
"val1"
127.0.0.1:6379> get key2
"new_val2"
127.0.0.1:6379>

标签:03,事务,127.0,命令,0.1,Redis,6379,key
From: https://www.cnblogs.com/trickyrat/p/17026303.html

相关文章

  • uniapp_03_获取媒体文件
    关于uniapp获取媒体文件什么是MediaStoreMediaStore内嵌类和常用查询字段查询图片查询视频查询音乐获取其它文件参考什么是MediaStoreMediaStore是And......
  • 20230103_每日学习记录
    20230103做多线程爬虫,需要有些对抗反扒机制的措施.有些时候直接写多线程,比如python的multiprocessing,会发现抓不下来东西.这也可能是我的爬虫没写好.但是就是发现同......
  • [oeasy]python0037_电传打字机_打印头_print_head_carriage_词源
    换行回车回忆上次内容上次我们diy了自己的小动物还可以让小动物变色、报时还可以说些话这很亚文化很酷炫的亚文化不是吗?回忆一下最开始研究报时......
  • python接口自动化系列 - openpyxl基本使用03
    一、openpyxl简单介绍一个Python库,用于读取/写入Excel2010 xlsx 、xlsm 、xltx 、xltm 文件不能操作 xls 文件Workbook:excel工作表Sheet:工作表中的一张表......
  • Spring 事务源码(五):事务的传播特性
    1、事务传播特性Springs事务传播特性: 名称解释 REQUIRED支持当前事务,如果当前没有事务,就新建一个事务。Spring默认的事务传播特性支持外......
  • redisson连接错误 Unable to init enough connections amount Only 23 from 32 were i
    背景开发过程中遇到了这个问题,翻找了一些帖子,记录一些“可能”的解决方案。出现问题的原因可能各有不同--redis官方回复是网络问题可选择的解决方案:--将redis连接超......
  • 使用ansible-playbook自动化安装redis哨兵
    【使用自动化安装MySQL主从架构】说明:使用ansible-playbook 自动化安装redis哨兵+redis-exporter的采集数据【剧本说明】以下文件在roles目录下treeroles/redis_s......
  • Django 03
    https://docs.djangoproject.com/en/4.1/intro/tutorial03/fromdjango.urlsimportpathfrom.importviewsapp_name='polls'urlpatterns=[path('',views.......
  • 从零开始学node.js笔记 03
    一、模块的加载机制1、优先从缓存中加载模块在第一次加载后会被缓存,这也意味着多次调用require()不会导致模块的代码被执行多次。注意:不论是内置模块、用户自定义模块、还是......
  • redis部署手册_20221129
    1.软件版本及下载Keepalived:https://www.keepalived.org/download.htmlRedis下载地址:https://redis.io/download/本次安装版本:Redis:7.0.5Keepalived:2.2.72.主......