提示文章写完后,目录可以自动生成如何生成可参考右边的帮助文档


Redis事务

Redis提供了简单事务功能,将一组需要一起执行命令放到multiexec两个命令之间

一个客户端

image.png

另外一个客户端

在事务没有提交的时查询(查不到数据

image.png

在事务提交查询(可以查到数据

image.png

可以看到sadd命令此时的返回结果是QUEUED,代表命令没有真正执行,而是暂时保存在Redis中的一个缓存队列(所以discard也只是丢弃这个缓存队列中的未执行命令,并不会回滚已经操作过的数据,这一点要和关系数据库的Rollback操作区分开)。

只有当exec执行后,用户A关注用户B的行为才算完成如下所示exec返回两个结果对应sadd命令。

事务回滚机制

在这里插入图片描述

Redis 事务是不支持回滚的,不像 MySQL 的事务一样,要么都执行要么都不执行

但是要注意Redis的事务功能很弱。在事务回滚机制上,Redis只能对基本语法错误进行判断

如果事务中的命令出现错误,Redis 的处理机制也不尽相同

1、语法命令错误

image.png

例如下面操作错将set写成了sett属于语法错误,会造成整个事务无法执行,事务内的操作都没有执行:

2、运行错误

例如:事务内第一个命令简单设置一个string类型第二个这个key进行sadd命令,这种就是运行时命令错误,因为语法正确的:

image.png

可以看到Redis并不支持回滚功能,第一个set命令已经执行成功,开发人员需要自己修复这类问题

Redis 事务是不支持回滚的,不像 MySQL 的事务一样,要么都执行要么都不执行

Redis 服务端在执行事务的过程中,不会被其他客户端发送来的命令请求打断。直到事务命令
全部执行完毕才会执行其他客户端的命令。

Redis 事务为什么支持回滚?

Redis的事务原理

  1. 事务是Redis实现服务器端行为用户执行MULTI命令时,服务器会将对应这个用户客户端对象设置一个特殊状态
  2. 这个状态下后续用户执行的查询命令不会被真的执行,而是被服务器缓存起来,直到用户执行EXEC命令为止,
  3. 服务器会将这个用户对应客户端对象缓存的命令按照提交的顺序依次执行。
    在这里插入图片描述

原文地址:https://blog.csdn.net/weixin_48052161/article/details/134759363

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_33716.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注