我对redis缓存实现非常陌生。你能告诉我复制因子是什么意思吗?它是如何工作的或有什么影响?谢谢。
oyjwcjzk1#
在redis复制的基础上(不包括redis cluster或redis sentinel作为附加层提供的高可用性特性),有一个非常易于使用和配置的leader-follower(master-slave)复制:它允许副本redis示例是主示例的精确副本。每次链接中断时,复制副本都会自动重新连接到主机,并且无论主机发生什么情况,复制副本都会尝试成为它的精确副本。该系统使用三种主要机制工作:当主机和副本示例连接良好时,主机通过向副本发送命令流来保持副本的更新,以便复制由于以下原因对数据集产生的影响:客户端写入、密钥过期或被逐出、任何其他更改主数据集的操作。当主机和副本之间的链接中断时,由于网络问题或由于在主机或副本中检测到超时,副本将重新连接并尝试继续部分重新同步:这意味着它将尝试仅获取在断开连接期间丢失的部分命令流。当无法进行部分重新同步时,复制副本将要求进行完全重新同步。这将涉及一个更复杂的过程,在这个过程中,主机需要创建其所有数据的快照,将其发送到副本,然后随着数据集的更改继续发送命令流。redis默认使用异步复制,低延迟、高性能是绝大多数redis用例的自然复制方式。客户端可以使用wait命令请求某些数据的同步复制。然而,wait只能确保其他redis示例中有指定数量的已确认副本,它不会将一组redis示例转换为具有强一致性的cp系统:在故障转移过程中,已确认的写入仍可能丢失,具体取决于redis持久性的确切配置。然而,通过等待,在发生故障事件后丢失写操作的概率大大降低到某些难以触发的故障模式。
1条答案
按热度按时间oyjwcjzk1#
在redis复制的基础上(不包括redis cluster或redis sentinel作为附加层提供的高可用性特性),有一个非常易于使用和配置的leader-follower(master-slave)复制:它允许副本redis示例是主示例的精确副本。每次链接中断时,复制副本都会自动重新连接到主机,并且无论主机发生什么情况,复制副本都会尝试成为它的精确副本。
该系统使用三种主要机制工作:
当主机和副本示例连接良好时,主机通过向副本发送命令流来保持副本的更新,以便复制由于以下原因对数据集产生的影响:客户端写入、密钥过期或被逐出、任何其他更改主数据集的操作。
当主机和副本之间的链接中断时,由于网络问题或由于在主机或副本中检测到超时,副本将重新连接并尝试继续部分重新同步:这意味着它将尝试仅获取在断开连接期间丢失的部分命令流。
当无法进行部分重新同步时,复制副本将要求进行完全重新同步。这将涉及一个更复杂的过程,在这个过程中,主机需要创建其所有数据的快照,将其发送到副本,然后随着数据集的更改继续发送命令流。
redis默认使用异步复制,低延迟、高性能是绝大多数redis用例的自然复制方式。
客户端可以使用wait命令请求某些数据的同步复制。然而,wait只能确保其他redis示例中有指定数量的已确认副本,它不会将一组redis示例转换为具有强一致性的cp系统:在故障转移过程中,已确认的写入仍可能丢失,具体取决于redis持久性的确切配置。然而,通过等待,在发生故障事件后丢失写操作的概率大大降低到某些难以触发的故障模式。