gpt4 book ai didi

java - 进程内缓存 vs 分布式缓存与可变/不可变对象(immutable对象)的一致性

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:55:02 24 4
gpt4 key购买 nike

我听我的同事说,在缓存 immutable 对象时,进程内缓存是更好的选择,因为一致性不是大问题(最终一致性)。而外部分布式缓存更适合您始终希望读取保持一致(强)的可变对象。

这总是事实吗?我真的不明白可变性与一致性有何关系。有人可以帮助我理解这一点吗?

最佳答案

当您使用分布式缓存时,每个对象都在多个独立机器、多个缓存节点之间复制。

如果您的对象是不可变的,复制就不是问题:因为对象永远不会改变,所以任何缓存实例都将提供完全相同的对象。

一旦对象变得可变,就会出现一致性问题:当您向缓存实例请求对象时,您如何确定交付给您的对象是最新的?如果在一个缓存实例为您服务时,该对象正在被另一个用户在另一个缓存实例上修改怎么办?在这种情况下,您不会收到最新版本,您会收到一个过时的版本

要处理这个问题,必须做出选择。一种选择是接受某种程度的陈旧性,这样可以获得更好的性能。另一种选择是使用某种同步协议(protocol),这样您就永远不会收到陈旧的数据:但显然,远距离缓存节点之间的这种数据同步会导致性能损失。

相反,假设您将某个对象的一些修改上传到缓存节点。如果同时另一个用户将同一对象的一些修改上传到另一个缓存节点怎么办?这应该被允许,还是应该被某种锁定机制禁止?

此外,缓存节点上的对象修改是否应该立即对该缓存节点的用户可见?还是只有在复制到其他节点后它们才可见?

归根结底,在多个用户之间共享分布式缓存时,可变对象确实会使事情变得更加复杂。尽管如此,这并不意味着不应该使用这些缓存:它只是意味着需要更多的时间和更多的谨慎来研究所有可用的选项并为每个应用程序选择合适的缓存。

关于java - 进程内缓存 vs 分布式缓存与可变/不可变对象(immutable对象)的一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33332288/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com