首页 > 数据库 >redis 事务

redis 事务

时间:2023-05-14 17:23:08浏览次数:39  
标签:事务 redis 命令 监控 执行 异常

1. 事务概述:

1.1 什么是事务:

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

1.2 与传统关系型数据库的事务相比redis事务的不同之处:

我觉得最关键的一个不同就是redis事务不能保证原子性,在MySQL的一个事务里的命令要么全部成功要么全部失败,
但是在redis事务里,它只会把这个事务里的一系列命令执行完,不管成功与否,事务都算结束了

2. 事务的常用操作:

2.1 事务正常执行:

输入MULTI命令标记开启一个事务,之后的每条命令都会进入对列,显示QUEUED即已经进入队列。
输入EXEC命令,会执行事务块内(队列)的所有命令。

2.2 放弃事务:

在事务块内输入命令DISCARD,该事务块内的所有命令不会执行,并且退出该事务块。

2.3 事务异常(执行异常):

执行前异常一般是这种命令出错(编译错误)的异常

2.4 事务异常(执行异常):

执行后异常一般指执行错误的异常,这种异常,除了出错的命令外,正常执行的命令都会在这个事务块执行后成功运行。不能保证原子性的原因。

2.5 watch监控:

1)加监控且没有被篡改的情况:

2)加监控出现加塞篡改的情况:

说明:

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

复习:悲观锁和乐观锁

悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。
乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据。
乐观锁策略:提交版本必须大于记录当前版本才能执行更新
redis是性能优先的数据库,肯定是使用的乐观锁实现,因为悲观锁实现会频繁加锁,对性能的消耗大。

3)unwatch:
开启unwatch后,在该命令之前的监控全部失效,不会对数据进行监控

4)注意:
一旦执行了EXEC,之前加的监控锁都会被取消掉;当客户端连接断开时,所有监控锁会被取消。

标签:事务,redis,命令,监控,执行,异常
From: https://www.cnblogs.com/chaodahao/p/17399679.html

相关文章

  • 04-面试必会-Redis篇
    01-你们项目中哪里用到了Redis?在我们的项目中很多地方都用到了Redis,Redis在我们的项目中主要有三个作用:使用Redis做热点数据缓存/接口数据缓存使用Redis存储一些业务数据,例如:验证码,用户信息,用户行为数据,数据计算结果,排行榜数据等使用Redis......
  • errorCode: SYSTEM_EXCEPTION(UnexpectedRollbackException), message: 系统出现异常,请联系
    该异常为A方法加上@Transactional注解后,在方法内某段代码加上trycatch捕获且调用外部A方法也加上了异常捕获;原因是事务回滚是一旦它在方法内发现了exception,就会向上回滚,此时你将异常包裹,先行处理掉异常后事务自然回滚不了。解决方法是,直接try去掉,然后解决异常即可。......
  • Redis基础命令汇总,看这篇就够了
    本文首发于公众号:Hunter后端原文链:Redis基础命令汇总,看这篇就够了本篇笔记将汇总Redis基础命令,包括几个常用的通用命令,和各个类型的数据的操作,包括字符串、哈希、列表、集合、有序集合等在内的基本操作。以下是本篇笔记目录:通用命令字符串命令哈希命令列表命令集合命......
  • redis学习
    目录1.redis常用的命令a>String命令b>Hash命令c>list命令D>Set命令E>Sotedset命令F>对value操作的命令(通用命令)2.redis在java中的连接a>配置commons-pool依赖b>配置yml文件连接redisc>自定义序列化redis的键值3.序列化器改进4.session改为Redisa>session模式b>Redis实现短信登陆(1)......
  • NET Core 事件总线,分布式事务解决方案:CAP
    转载:https://blog.csdn.net/WuLex/article/details/1245648311.事件总线概念事件总线是一种事件发布/订阅结构,通过发布订阅模式可以解耦不同架构层级,同样它也可以来解决业务之间的耦合,它有以下优点松耦合横切关注点可测试性事件驱动事件总线类型进程内事件(Event):本地事件,它......
  • mysql常用函数、查询和事务说明笔记
    1.MySQL中内置了很多字符串函数,常用的几个如下:运用示例:示例表里初始数据:  字段title和titleImageconcat:字符串拼接selectconcat(title,titleImage)asnewtitlefrom testtablewhereid=65;lower:全部转小写select lower(title) asnewtitlefrom testta......
  • RedisInsight支持redis集群可视化
    RedisInsight是Redis官方出品的可视化管理工具,可用于设计、开发、优化你的Redis应用。支持深色和浅色两种主题,界面非常炫酷!可支持String、Hash、Set、List、JSON等多种数据类型的管理,同时支持远程使用CLI功能,功能非常强大!......
  • redis持久化之AOF
    1.什么是AOF:AOF(AppendOnlyFile):以日志的形式来记录每个写操作,将redis执行过的所有写指令记录下来(读操作不记录),只允许追加文件不允许改写文件,redis启动时会读取该文件重新构建数据。即:redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。但......
  • Docker 安装 Redis
    方法一、dockerpullredis:3.2查找DockerHub上的redis镜像runoob@runoob:~/redis$dockersearchredisNAMEDESCRIPTIONSTARSOFFICIALAUTOMATEDredisRedisisanopensource...2321[OK]sa......
  • 浅谈一下ThinkPHP5.1实现事务嵌套的特性
    前言:       在我们平时做的一个项目中,线上环境突然发现数据库被锁住。导致很多有关数据插入和修改的接口全都瘫痪,项目基于ThinkPHP5.1。报错的时候,我们发现了一条sql错误日志,如下。   根据错误信息提示,是说有一个事务回滚时没有找到savepoint的暂存点。所以问题应该......