1.为什么不使用 Redis 中的事物 ?
Redis 中的事物是 "弱事物",它在操作的时候,是将多个命令全部加入到事物队列中,然后通过 exec 命令一次性执行所有命令。这样做的好处是可以减少网络往返的次数,提高效率。
它的使用示例如下:
Redis 操作事物的命令有以下几个 :
- MULTI (开启事务):类似于 MySQL 8.0 之后的 begin;
- EXEC(提交事务):用于提交事务,它会执行事物队列中的所有命令。执行过程中,任何一条命令出错,按理来说是需要进行回滚的(但是 Redis 的事物很玄学)。
- DISCARD(回滚事务):用于取消一个事物,清空事物队列中所有的命令。
为什么说 Redis 中的事物很玄学,没人使用 ?
示例一:事物中进行嵌套事务
从上图可以看出来,Redis 中的事物,在执行过程中出错了,提交事物的时候,并没有进行回滚,而是正常提交了。接下来再来看一个示例>
示例二:事物执行过程中写错命令
刚才明明是事物执行中报错也提交了事物,为啥这次事物执行中报错却取消事物了呢 ? 所以说 Redis 中的事物很玄学,没人使用。并且 Redis 中的事物也没有像 MySQL 那样设置隔离级别,它没有隔离性可言,在 Redis 事物执行期间,其他客户端的读写操作仍然可以进行。