Redis的设计模式决定了,满足原子性的incr操作同时能保证数据的一致性。
原子性和一致性是数据库事务中提及较多的概念,同时还包括隔离性和持久性。为什么数据库事务要同时满足这四个特性,而Redis不用呢?主要原因是两者的并发处理模型不一样。
Redis采用IO多路复用模式,即多个网络连接复用一个处理线程。这种模式下,所有的命令都是顺序执行的,不存在多线程场景下的并发问题,同时命令的原子性保证了,这个操作要么完全执行,要么全部回滚,没有第三种情况,也就保证了数据的一致性:其他命令只有在之前的命令执行完毕或执行失败之后才能执行,数据状态一定是一致的。