mysql - 使用多个服务器处理过时的缓存

标签 mysql .net caching invalidation

我们目前在一台服务器上托管了一个网站,并且正在考虑添加一台新服务器。主要问题是关于缓存。某些项目根据更改时间进行缓存。然而现在,它们在同一进程中发生更改,因此缓存可能会失效。

如果网站托管在两台服务器上,则可以在两台服务器上进行更改,并且它们不会收到此类更改的通知。缓存需要保留,因为它可以大大加快网站速度。我希望缓存不在缓存服务器的进程外进行,因为它会降低网络速度而不是内存速度,并增加服务器的复杂性。

该网站是在 .Net 中实现的,并使用 MySQL 作为支持数据存储。我的问题是当数据发生变化时如何通知流程。是否有可能当数据发生变化时MySQL会自动通知所有注册的客户端?我使用过 RavenDb,它具有类似的功能,非常方便。我找不到 MySQL 的类似内容。如果这是不可能的,有什么想法可以解决这个问题吗?

最佳答案

分布式缓存是一个复杂的主题。听起来您正在运行一个更基本的内存缓存。如果是这种情况,您将需要自己处理同步,或者对数据的“最终一致性”感到满意,假设您有一些过时的 key 检查机制。

我个人会考虑使用 memcached(我们使用 Couchbase)。您对这成为网络瓶颈的看法可能没有实现,尽管实际上内存访问速度更快。实际上,我们注意到 Couchbase 缓存速度足够快,而且在关键级别是原子的。它将处理节点上的 key 分发。

至于MySQL向客户端推送通知,我不确定,但我不这么认为。如果您在数据库访问上有一层代码(DAL 等),您可以自己模拟这一点。

让缓存遵循与数据库相同的完整性原则的愿望也很难调和。如果你实现了这一点,那么你所做的就是建立一个内存数据库。缓存应该是随着时间的推移数据准确性的权衡,以提高可扩展性。

关于mysql - 使用多个服务器处理过时的缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21723990/

相关文章:

当行为空时mysql返回多个0列

MySQL LEFT JOIN 在连接表上使用 MAX 和 GROUP BY?

.net - 已安装的 Microsoft.VisualStudio.QualityTools.UnitTestFramework 未出现在 nuget 包列表中

c# - 在 WinForms 'TreeNode' 的文本中插入一个实心星号

Nginx 反复修改后不刷新文件。返回旧的 Last Modified header

php - MySQL插入多条记录并在另一个表中引用它们

php - 如何在mysql中检索二进制文件数据作为转换后的字符?

.net - ManagementObject 和 ManagementBaseObject 之间有什么区别

javascript - 强制已设置的缓存控制 header 立即过期

c# - 从页面外部访问应用程序状态