1

我的任务是构建一个流程来补偿我们的 LDAP 系统上的复制延迟。目前,有 1 个写服务器和 4 个读服务器。将条目写入写入服务器后,系统上最多可能有 4 秒的延迟,然后才会将条目复制到读取服务器。因此,如果我调用更新记录的服务“A”,然后立即点击应该读取该记录的服务“B”,则数据将是陈旧的。

为了解决这个问题,我计划构建一个缓存 Web 服务,以便没有应用程序直接与数据库交互,而是通过缓存服务。该服务会将所有创建、更新和删除存储在缓存中(大概是一个List<ModelObject>)。CRUD - R 条目需要在缓存中至少保留四秒钟。然后,当服务“B”尝试读取时,缓存服务将在对数据库执行读取操作之前检查缓存。

所以,我的问题是两部分。1)这是一个可行的解决方案,如果不是,你看到什么问题?2) 我将如何对 WCF 服务中的缓存进行维护。换句话说,有没有办法启动一个后台工作线程,从缓存中清除 4 秒前的条目?

4

2 回答 2

1

关于#1,我想说这是可行的,虽然生成自己的缓存层可能有它自己的困难和陷阱。除了将所有负载放在一个缓存服务器上(与可以处理请求负载的 4 个分布式 LDAP 服务器相反)之外,我想不出其他任何事情。

关于#2,我建议您查看Enterprise Library Caching Application Block,我相信它具有您需要的所有必要功能,包括基于时间、持续时间等的清理。

于 2010-06-22T00:44:24.883 回答
1

为了解决这个问题,我计划构建一个缓存 Web 服务,以便没有应用程序直接与数据库交互,而是通过缓存服务。

听起来对我来说是正确的解决方案。

.NET 包含多个缓存库,使您可以轻松实现这一目标。这是我的最爱:

http://www.infoq.com/news/2010/05/Runtime.Caching http://msdn.microsoft.com/en-us/library/system.web.caching.cache.aspx

换句话说,有没有办法启动一个后台工作线程,从缓存中清除 4 秒前的条目?

你不需要。当您将项目添加到缓存时,只需将 expireTime 设置为(Now+4 秒)。

但实际上你不应该需要过期时间。如果这是更改值的唯一方法,那么它永远不会过期。

于 2010-06-22T00:44:57.567 回答