什么是事务?
事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。事务有四个非常重要的特点:ACID。
- A(原子性):原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
- C(一致性):事务前后数据的完整性必须保持一致。
- I(隔离性):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
- D(持久性):持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
Reids 事务的概念
Redis 事务的本质是通过 MULTI, EXEC, WATCH 等一组命令的集合。Redis 事务的执行过程为:开启事务 -> 命令队列 -> 序列化 -> 串行执行。
串行执行即若出错,则后面停止,前面的并没有进行回滚。所以 Redis 默认是不支持事务(没有原子性)操作的。
为什么 Redis 不支持回滚操作呢?
Redis 运行指令是单线程的,同时 Redis 保证了一个事务的所有指令有序执行,即不会插入其他的语句,保证了事务的原子性。所以不会出现不同进行同时修改的问题,所以在程序员不写错代码的情况下是不会出错的,不需要回滚机制。
Redis 能保证隔离性吗?
慢慢:由于 Redis 是单进程程序,并且它保证在执行事务时不会对事务进行终端,所以不会产生别的线程干扰事务执行的情况,所以保证隔离性。