redis事务

事务实现

基本命令

  • MULTI

显式地表示一个事务的开启,把这些命令暂存到一个命令队列中

  • EXEC

实际执行命令队列中的所有命令

  • DISCARD

主动放弃事务执行,把暂存的命令队列清空(起不到回滚的效果)

  • WATCH

在事务执行前,监控一个或多个键的值变化情况,当事务调用 EXEC 命令执行时,WATCH 机制会先检查监控的键是否被其它客户端修改了。如果修改了,就放弃事务执行,避免事务的隔离性被破坏。然后,客户端可以再次执行事务,此时,如果没有并发修改事务数据的操作了,事务就能正常执行。

异常分析

1、客户端发送的操作命令中存在语法错误

拒绝执行所有提交的命令操作,返回事务失败

2、命令和操作的数据类型不匹配,但 Redis 实例没有检查出错误

Redis 对错误命令报错,但正确的命令也会执行。(事务的原子性就无法得到保证)

3、在执行事务的 EXEC 命令时,Redis 实例发生了故障,导致事务执行失败

  • 如 Redis 开启了 AOF 日志,那么,只会有部分的事务操作被记录到 AOF 日志中。

使用 redis-check-aof 工具检查 AOF 日志文件,可把已完成的事务操作从 AOF 文件中去除。使用 AOF 恢复实例后,事务操作不会再被执行,从而保证了原子性。

  • 如 AOF 日志没有开启,那么实例重启后,数据没法恢复了,此时,也就谈不上原子性了。

   转载规则


《redis事务》 wangyixin-tom 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
redis消息队列 redis消息队列
需求分析 消息保序:消费者需要按照生产者发送消息的顺序来处理消息 处理重复的消息:消费者避免多次处理重复的消息 保证消息可靠性:消费者重启后,可以重新读取消息再次进行处理 基于List LPUSH 把要发送的消息依次写入 Lis
2020-11-02
下一篇 
redis分布式锁 redis分布式锁
为了保证并发访问的正确性,Redis 提供了两种方法,分别是加锁和原子操作。 原子操作 单命令操作(INCR/DECR); 把多个操作写到一个 Lua 脚本中,以原子性方式执行单个 Lua 脚本 分布式锁 分布式锁的加锁和释放锁的过程,涉
2020-10-29
  目录