主从模式
- 通过持久化功能,redis保证了即使在服务器重启的情况下也不会丢失(或少量丢失)数据,因为持久化会把内存中的数据保存在硬盘上。重启会从硬盘上加载数据。但是由于数据是存在一台服务器上,如果这台服务器出现硬盘故障等问题,也会导致数据丢失
- 为了避免单点故障,通常的做法是将数据复制多个副本,以部署在不同的服务器上,这样即使有一台服务器出现故障,其他服务器依然可以提供服务。为此,reids提供了复制(replication)功能,可以实现一台数据库中的数据更新后,自动将更新的数据同步到其他服务器上。
- 在复制的概念中,数据库分为两类,一类是主数据库(master),另一类是从数据库(slaver
- 主数据库可以进行读写操作,当写操作导致数据变化时会自动将数据同步给从数据库。
- 而从数据库一般只是只读的,并接受数据库同步过的数据。
- 一个主数据库可以拥有多个从数据库,而一个从数据库只能拥有一个主数据库。
哨兵(sentinel)模式
哨兵模式的特点:
- 第一种主从同步/复制的模式,当主服务器宕机后,需要手动把一台服务器切换为主服务器。这就需要人工干预,费时费力。还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。
- 哨兵模式是一种特殊的模式,首先redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,他会独立运行
- 其原理是哨兵通过发送命令,等待redis服务器响应,从而监控运行的多个redis实例。
cluster模式
- redis的哨兵模式基本可以实现高可用,读写分离,但是在这种模式下,每台redis服务器都存储相同的数据,浪费内存。并且水平扩容很费劲。
- 所以在redis 3.0上加入了cluster集群模式,实现了redis的分布式存储,也就是说每台redis节点上存储不同的内容。
- 官方推荐cluster集群模式,水平扩容也方便。
注意:Redis Cluster集群不再支持多数据库,而是将所有 keys 分散到 16384 个 hash slots 中,再将这些 hash slots 打散到多个 Redis master 节点来存储。