高可用:主从复制, 哨兵
原子性偏过程,一致性偏结果
mysql把四大特性完美实现,所以是强事务性
其他数据库四大特性多多少少都有取舍
mysql在磁盘中记录了命令执行中所有数据的状态,可以回滚数据,所以具有原子性
因为redis是单进程单线程,天生具备隔离性,不用技术实现
原子性要成功,必须碰磁盘,redis对其做了取舍,会有中间状态
会有中间状态,不保证原子性,一致性也无法完美达到
redis不是纯磁盘存储,持久性也有取舍,保证大部分数据不丢失,允许小部分数据丢失
redis注重做数据极速的存取,不注重事务!
开启事务后,命令全部发给redis,redis会给此次客户端一个存储空间,按顺序存储这些命令,先不执行,直到EXEC指令再执行
先存储,再执行
mysql的回滚是执行了命令又撤回,redis的DISCARD是清空命令,实际一个命令也没有执行
多个Django连接一个redis时,A和B同时发送几个命令,redis的事务能保证先执行A的几个命令,再执行B的几个命令,不会导致命令顺序的混乱
语法错误,命令入队失败,直接自动discard退出事务,此情况下没有中间状态!
有命令,但是用错数据类型,比如list的命令用到操作string类型
出现中间状态(上面数据set了,没有被删除),无法回滚,没有解决方案