Redis的事物不支持完整的ACID,Redis虽然提供事物功能,但是Redis的事物和关系数据库事务不可同日而语,Redis的事物只能保证隔离性和一致性(I和C),无法保证原子性和持久性(A和D),具体实现原理如下:
- 原子性
Redis事物不支持原子性,Redis不支持回滚操作,事物中间一条命令执行失败,既不会导致前面已经执行的命令回滚,也不会中断后面的命令的执行。
- 一致性
Redis事物能够保证事物开始之前和事物结束以后,数据库的完整性没有被破坏
- 隔离性
Redis不存在多个事物的问题,因为Redis是单进程单线程的工作模式,这种隔离性的方式也带来了一个隐含的问题,如果某个客户端通过事物提交了大量的命令,那么阻塞其他客户端进行任何操作
- 持久性
Redis提供了两种持久化的方式,即RDB和AOF
RDB 持久化只备份当前内存中的数据集,事物执行完毕时,其数据还在内存中,并未立即写入磁盘,所以RDB 持久化不能保证Redis事物的持久性
AOF持久化是先执行命令,执行成功后再将命令追加到日志文件中,即使AOF每次执行命令后立刻将日志文件刷盘,也可能丢失1条命令数据,因此AOF也不能严格保证Redis事物的持久性