处理具有多个服务器的陈旧缓存

时间:2014-02-12 09:40:49

标签: mysql .net caching invalidation

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

如果网站托管在两台服务器上,则可以在两台服务器上进行更改,并且不会通知这些更改。缓存需要保持,因为它大大加快了网站的速度。我更喜欢缓存在缓存服务器中不被禁止进程,因为它降低到网络速度而不是内存速度,并增加了服务器的复杂性。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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