微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用只读副本时,分布式LRU缓存如何正确逐出条目

给出一个分布式缓存(例如Redis),该缓存设置为使用只读副本。复制副本上发生所有读取时,如何在主实例中更新LRU或生存时间?副本是否还必须与主服务器进行对话,以使其知道给定密钥发生了读取,以便它可以更新LRU?这是不是从本质上将负载放回了主服务器上(因为我们试图从读取开始,以支持更多连接)?还是他们做一些更聪明的事情,例如说发送自上次通话以来已被读取的密钥?在我看来,主人必须知道什么时候读取才能正确地从缓存中逐出旧项目

解决方法

主服务器不知道副本上已访问了哪些密钥,即这些统计信息不会发送回主服务器。因此,在您的情况下,主服务器的LRU到期将不考虑副本统计信息。如果master仅负责写操作,则仅使用这些写操作执行LRU到期。

由于Redis 5默认情况下,副本不会进行LRU逐出。相反,它仅同步来自主节点的删除操作,即,如果已在主节点上退出密钥,它将同步删除操作到副本,然后副本可以退出

如果您在副本上启用LRU收回,即replica-ignore-maxmemory no,而不是逐出主服务器通知的密钥,它还将根据对副本的读写操作来删除副本上的密钥。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。