Redis事务为什么不支持回滚

Redis事务中过程中的错误分类两类

  • 在exec执行之前的错误,这种错误通常是指令错误,比如指令语法错误、内存不足等...

--> 在开始事务后,传输指令时,遇到这种错误,Redis会给出Error错误提示,事务处理方式就是上述内容。

  • 在exec执行之后产生的错误,这种错误通常是因为不正确的编程(涉及到具体业务的)程序,导致的逻辑错误。

--> 这种错误,Redis的处理方式和关系型数据库做法完全不一样,关系型数据库事务会使用数据回滚来弥补数据错误。
而Redis对于这种错误,不予处理,换句话说,如果开始事务后有3个命令在输入后都是Queue,那么exec时,即使其中有指令出现错误,其他指令也会正常进行。

为什么,exec之后的错误不处理也不进行回滚?
1、Redis开发者认为,大部分指令的错误问题,已经在exec之前发现了并进行事务取消,而exec之后的错误大多数为编程错误问题,这些问题并不能在入队时发现,这些问题应该在开发时被发现而不是在生产环境中。

2、Redis不需要进行滚回,也保持了简单和高效。
事务和pineline区别?(原子性、网络通信次数、返回结果)
1、事务是基于redis服务端的事件,它具有原子性(要么都执行,要么都不执行 --再执行命令到queue阶段,但是redis中一旦成功执行exec事务,即使有错误也会继续执行),其中每个命令加入队列都一次通信,并会返回结果queue或者error,最后执行之后会返回一次性成功or或者失败error结果。

2、pineline它是为了减少网络通信次数,将一批命令一次性发送,它不具有原子性,只有最后返回每个命令的执行结果。

相关推荐
IT龟苓膏2 小时前
Redis 数据类型底层原理:SDS、quicklist、intset、skiplist、Bitmap、HyperLogLog 一篇讲清
数据库·redis·skiplist
是烨笙啊4 小时前
在 Claude code 中如何利用模型缓存节省 token
人工智能·缓存·ai编程
闪电悠米4 小时前
黑马点评-Redisson-01_why_redisson
java·服务器·网络·数据库·缓存·wpf
dllxhcjla5 小时前
Redis
数据库·redis·缓存
许彰午6 小时前
JWT的四种设计策略——轻量负载缓存外置上下文线程统一验证
java·安全·缓存·tomcat
牛油果子哥q10 小时前
【Redis分布式高阶篇】Redis分布式锁底层精讲:从裸锁缺陷到Redisson源码级落地,解决超时释放、锁失效、主从漏洞、锁续约难题
数据库·redis·分布式
闪电悠米11 小时前
黑马点评-Redisson-02_reentrant_lock
java·spring boot·redis·分布式·缓存
SilentSamsara12 小时前
缓存策略实战:Redis + Python 多级缓存设计与失效策略
开发语言·redis·python·缓存·性能优化
西安邮电大学12 小时前
Redis四大经典缓存问题
java·redis·后端·其他·面试
超梦dasgg13 小时前
Redisson解锁失败,WatchDog会不会一直续期下去?
java·redis