中小企业网站制作流程,做旅游销售网站平台ppt模板,新时代文明实践站模板,音乐网站的音乐怎么做提示#xff1a;文章写完后#xff0c;目录可以自动生成#xff0c;如何生成可参考右边的帮助文档 文章目录 Redis事务事务回滚机制Redis 事务是不支持回滚的#xff0c;不像 MySQL 的事务一样#xff0c;要么都执行要么都不执行#xff1b; Redis的事务原理 Redis事务
… 提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档 文章目录 Redis事务事务回滚机制Redis 事务是不支持回滚的不像 MySQL 的事务一样要么都执行要么都不执行 Redis的事务原理 Redis事务
Redis提供了简单的事务功能将一组需要一起执行的命令放到multi和exec两个命令之间。
multi 命令代表事务开始exec命令代表事务结束discard命令是回滚
一个客户端 另外一个客户端
在事务没有提交的时查询查不到数据 在事务提交后查询可以查到数据 可以看到sadd命令此时的返回结果是QUEUED代表命令并没有真正执行而是暂时保存在Redis中的一个缓存队列所以discard也只是丢弃这个缓存队列中的未执行命令并不会回滚已经操作过的数据这一点要和关系型数据库的Rollback操作区分开。
只有当exec执行后用户A关注用户B的行为才算完成如下所示exec返回的两个结果对应sadd命令。
事务回滚机制 Redis 事务是不支持回滚的不像 MySQL 的事务一样要么都执行要么都不执行 但是要注意Redis的事务功能很弱。在事务回滚机制上Redis只能对基本的语法错误进行判断。
如果事务中的命令出现错误,Redis 的处理机制也不尽相同。
1、语法命令错误 例如下面操作错将set写成了sett属于语法错误会造成整个事务无法执行事务内的操作都没有执行:
2、运行时错误
例如事务内第一个命令简单的设置一个string类型第二个对这个key进行sadd命令这种就是运行时命令错误因为语法是正确的: 可以看到Redis并不支持回滚功能第一个set命令已经执行成功,开发人员需要自己修复这类问题。 Redis 事务是不支持回滚的不像 MySQL 的事务一样要么都执行要么都不执行 Redis 服务端在执行事务的过程中不会被其他客户端发送来的命令请求打断。直到事务命令 全部执行完毕才会执行其他客户端的命令。 Redis 事务为什么不支持回滚 Redis 的事务不支持回滚但是执行的命令有语法错误Redis 会执行失败这些问题可以从程序层 面捕获并解决。但是如果出现其他问题则依然会继续执行余下的命令。这样做的原因是因为回滚 需要增加很多工作而不支持回滚则可以保持简单、快速的特性。
Redis的事务原理
事务是Redis实现在服务器端的行为用户执行MULTI命令时服务器会将对应这个用户的客户端对象设置为一个特殊的状态在这个状态下后续用户执行的查询命令不会被真的执行而是被服务器缓存起来直到用户执行EXEC命令为止服务器会将这个用户对应的客户端对象中缓存的命令按照提交的顺序依次执行。