Redis(十三)——事务

1、什么是Redis的事务?

一次性 按顺序 执行多个命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。

2、事务相关命令与使用

  • MULTI :开启事务,redis会将后续的命令逐个放入队列中,然后使用EXEC命令来原子化执行这个命令系列。
  • EXEC:执行事务中的所有操作命令。
  • DISCARD:取消事务,放弃执行事务块中的所有命令。
  • WATCH:监视一个或多个key,如果事务在执行前,这个key(或多个key)被其他命令修改,则事务被中断,不会执行事务中的任何命令。
  • UNWATCH:取消WATCH对所有key的监视。

3、事务出现错误处理

  • 编译错误(入队错误):整个事务提交失败,不执行。
  • 运行时错误:错误的命令将错就错,不影响其他正确的命令,不回滚。

4、事务的执行步骤

  • 开启:以MULTI开始一个事务
  • 入队:将多个命令入队到事务中,接到这些命令并不会立即执行,而是放到等待执行的事务队列里面
  • 执行:由EXEC命令触发事务

5、为什么redis事务不支持回滚?

  • 运行时错误不是是编程错误,回滚并不能解决错误。
  • 不支持回滚,可以保持redis内部简单且快速。

6、如何理解redis的ACID

  • 原子性atomicity:事务里的命令,要么不执行,要么全部执行,不是全部成功执行。
  • 一致性consistency:定义是「没有包含非法、无效、错误的数据」。 入队错误不执行事务,不改变数据;运行时错误,不改变数据;意外宕机,通过持久化机制回到执行事务前,不改变数据。
  • 隔离性isolation:多个事务不相互干扰,redis是单线程且事务里的命令按顺序执行。
  • 持久性durability:不具备持久性,持久化机制由RDB和AOF保证,想保证持久性则需要「在事务结尾加个bgsave命令」或者「设置appendfsync参数为always」,影响性能,不推荐。
posted @ 2022-12-04 11:05  守林鸟  阅读(34)  评论(0编辑  收藏  举报