Redis事物
Redis中是有事物,但是它的事务和数据库中的有些不一样。
Redis的acid
原子性,如果事物刚开始的命令被判断是错误的,例如使用了put等Redis中没有的关键词,Redis会直接把这个事物抛弃,这时候就保证了原子性。但是如果刚开始检查的时候,没有检查出错误,但是执行的时候发现错误了,这个时候就没有原子性了,下面的操作还是会执行的。
一致性,如原子性一样,如果Redis一开始检查出来了,就会拒绝执行事物,如果没有检查出错误,但是执行的时候发现了错误,还是会执行的。如果在事物执行到一半之后发生故障,如果使用的是AOF,那么一致性不可以保证,但是使用RDB的话,一致性是可以保证的。
隔离性,如果在事物执行的阶段,有别的命令一起进来的话,就需要使用watch命令来确保隔离性。但是如果是在事物执行完毕的时候,有命令进来的话,Redis会优先执行事物中的命令。
持久性,RDB和AOF都可以保证持久性。
Redis主从同步问题
Redis主从同步是会有延迟的,一般有两个因素
一网络因素,可能网络延迟过长导致命令从主库传送到从库晚了很久。
二从库正在处理复杂的数据,导致从库接受主库的RDB数据时无法及时同步。
Redis还有可能读取过期的数据。
如果Redis给主库设置10秒后过期,结果从库收到这个命令后已经是3秒后了,从库就会晚三秒过期。因此的话,可以设置为十点钟过期,这种统一时间。
Redis脑裂
如果哨兵判断Redis主库客观下线,结果其实它没有下线,它仍然在接受客户端的消息,这个时候哨兵们已经选好了新的主库,这个时候,这段时间的命令就会丢失,也就是脑裂。可以依靠判断多少个从库多少秒钟如果无法连接到主库,客户端就禁止发送数据给主库来避免脑裂。