网站开发与服务合同,井冈山网站建设,WordPress当前菜单高亮,青岛网站建设谁家好一些对于 Redis 而言#xff0c;不单单需要注意其事务处理的过程#xff0c;其回滚的能力也和数据库不太一样#xff0c;这也是需要特别注意的一个问题——Redis 事务遇到的命令格式正确而数据类型不符合#xff0c;如图所示。 从图中可知#xff0c;我们将 key1 设置为字符串…对于 Redis 而言不单单需要注意其事务处理的过程其回滚的能力也和数据库不太一样这也是需要特别注意的一个问题——Redis 事务遇到的命令格式正确而数据类型不符合如图所示。 从图中可知我们将 key1 设置为字符串而使用命令 incr 对其自增但是命令只会进入事务队列而没有被执行所以它不会有任何的错误发生而是等待 exec 命令的执行。
当 exec 命令执行后之前进入队列的命令就依次执行当遇到 incr 时发生命令操作的数据类型错误所以显示出了错误而其之前和之后的命令都会被正常执行。注意这里命令格式是正确的问题在于数据类型对于命令格式是错误的却是另外一种情形如图所示。 从图中可以看到我们使用的 incr 命令格式是错误的这个时候 Redis 会立即检测出来并产生错误而在此之前我们设置了 key1在此之后我们设置了 key2。当事务执行的时候我们发现 key2 的值为空说明被 Redis 事务回滚了。
通过上面两个例子可以看出在执行事务命令的时候在命令入队的时候Redis 就会检测事务的命令是否正确如果不正确则会产生错误。无论之前和之后的命令都会被事务所回滚就变为什么都没有执行。
当命令格式正确而因为操作数据结构引起的错误则该命令执行出现错误而其之前和之后的命令都会被正常执行。
对于一些重要的操作我们必须通过程序去检测数据的正确性以保证 Redis 事务的正确执行避免出现数据不一致的情况。Redis 之所以保持这样简易的事务完全是为了保证移动互联网的核心问题——性能。