缓存—使用读副本时,分布式lru缓存如何正确地逐出条目

k4emjkb1  于 2021-06-08  发布在  Redis
关注(0)|答案(1)|浏览(459)

给定一个分布式缓存(如redis),它被设置为使用读副本。当所有读取都发生在副本上时,主示例中的lru或生存时间是如何更新的?复制副本是否也必须与主机对话,让它知道对给定密钥进行了读取,以便它可以更新lru?这从本质上说是不是会把负载放回主服务器上(因为我们一开始就试图将读操作移开以支持更多的连接)?或者他们会做一些更聪明的事情,比如说发送一批自上次谈话以来已经读过的钥匙?在我看来,为了正确地从缓存中逐出较旧的项目,主机必须知道何时读取内容

x7rlezfr

x7rlezfr1#

master不知道在副本上访问了哪些密钥,即这些统计信息不会发送回master。因此,在您的情况下,主服务器的lru过期将不考虑副本统计信息。如果master只负责写操作,则只有这些写操作才用于执行lru过期。
由于redis5,默认情况下,副本不会执行lru逐出。相反,它只从主节点同步删除操作,也就是说,如果主节点上的一个密钥已被逐出,它会将删除操作同步到副本,然后副本可以逐出它。
如果在复制副本上启用lru逐出,即。 replica-ignore-maxmemory no ,而不是逐出主服务器通知的密钥,它还将根据副本上的读写操作删除副本上的密钥。

相关问题