1、Redis有几种集群模式
redis有三种集群模式:主从集群,哨兵集群模式、去中心化集群模式
主从模式:提供数据的多冗余,主节点和从节点提供相同的数据,主节点宕机后,集群不可用
哨兵模式:哨兵模式是官方推荐的高可用方案,但不是真正的高可用。哨兵模式是在主从集群基础上实现的,每个节点部署哨兵,涉及到主观下线和客观下线,当半数以上的哨兵认为master宕机后,会根据优先级从从节点中选取一个成为新的master,当坏掉的master恢复后,会自动成为从slave。解决了主从集群的单点故障问题,但是所有节点提供相同的服务,资源有点浪费
去中心化集群模式:采用无中心化结构,每个节点保存数据和整个集群的状态,每个节点中间能够进行内部通讯,redis-cluster的数据使用分片的方式实现,redis-cluster集群内置了16384个哈希槽,0-16383,当要存储一个key-value时,redis会对key进行crc16运算出一个结果,用这个结果对16384进行取余,然后将这个key分配到对应的节点哈希槽中。当连接任何一个节点获取这个数据时,也会有这样的算法,然后内部跳转到存放key的这个节点上。去中心化一般也会做成主从模式,一个主节点对应一个或多个从节点,当主节点宕机后,从节点会成为新的主节点。当主节点没有从节点时,集群不可用,当主节点和从节点同时失效,集群不可用。
2、Redis持久化方式有几种
2种,RDB、AOF
RDB相当于把数据拍了个快照,但是可能因为在拍快照的时候,有新的数据生成,导致数据不够完整。AOF的完整性会高一点,因为AOF记录的数据的的写指令,再重启之后,只需要将这些指令从新执行一遍,就能够恢复数据。我们一般使用的是RDB方式,AOF视情况开启,一般只会选择一种,因为开启两种的话,可能会对redis造成一定的压力。只用RDB的话虽然数据完整性不高,但是影响也不大,因为数据库中还有一份,只需要同步到redis就行。