Redis事务

何为事务

Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。

总结说:redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。

Redis 的事务和我们平时理解的关系型数据库的事务不同。我们知道事务具有四大特性: 1. 原子性2. 隔离性3. 持久性4. 一致性

  1. 原子性(Atomicity): 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
  2. 隔离性(Isolation): 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
  3. 持久性(Durability): 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。
  4. 一致性(Consistency): 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;

**Redis 是不支持 roll back 的,因而不满足原子性的。**官网对此做出的解释是: Redis 开发者们觉得没必要支持回滚,这样更简单便捷并且性能更好。Redis 开发者觉得即使命令执行错误也应该在开发过程中就被发现而不是生产过程中。

使用事务

Redis事务相关的命令有5个:multi(开启事务),exec(执行事务中所有操作命令),discard(取消事务,放弃执行事务块中所有命令),watch(监视1个或多个key,事务执行前,这个key被其他命令修改,则事务终断,不会执行事务中任何命令)和unwatch(取消对所有key的监视)。事务的标准执行流程如下:

  1. 开始事务,运行multi命令;
  2. 输入一些列命令,即命令入队;
  3. 执行事务,运行exec命令,事务块中所有命令按照先进先出顺序执行。

错误处理

在执行事务块中的命令时,可能会报错,错误类型可以分两类:

  • 语法错误(编译器错误):导致事务提交失败,所有命令不会被执行。
  • 类型错误(运行时错误):跳过有错误的命令,继续执行事务块中剩余其他命令。

参考资料

  1. https://pdai.tech/md/db/nosql-redis/db-redis-x-trans.html
  2. https://javaguide.cn/database/redis/redis-questions-01
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2022 Yin Peng
  • 引擎: Hexo   |  主题:修改自 Ayer
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信