我的任务是构建一个可以弥补LDAP系统复制延迟的流程。目前,有一个写服务器和4个读服务器。在向写入服务器写入条目之后,在将条目复制到读取服务器之前,系统上最多可能有4秒的延迟。因此,如果我调用服务“A”来更新记录,然后立即点击服务“B”,这应该是读取该记录,那么数据将是陈旧的。
要解决此问题,我计划构建缓存Web服务,以便没有应用程序直接与数据库接口,而是通过缓存服务。该服务将所有创建,更新和删除存储在缓存中(可能是List<ModelObject>
)。 CRUD-R条目需要保留在缓存中至少四秒钟。然后,当服务“B”尝试读取时,缓存服务将在对数据库执行读取操作之前检查缓存。
所以,我的问题是两部分。 1)这是一个可行的解决方案,如果没有,你看到了什么问题? 2)如何在WCF服务中对缓存进行维护。换句话说,是否有一种方法可以启动后台工作线程来清除4秒钟内缓存中的条目?
答案 0 :(得分:1)
关于#1,我认为它是可行的,虽然生成自己的缓存层可能会有它自己的困难和陷阱。除了你将所有负载放在一个缓存服务器上之外,我无法想到任何其他东西(而不是可以处理请求负载的4个分布式LDAP服务器)。
关于#2,我建议您查看Enterprise Library Caching Application Block,我相信它具备您需要的所有必要功能,包括根据时间,持续时间等进行清理。
答案 1 :(得分: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秒钟内缓存中的条目?
你不需要。将项目添加到缓存时,只需将expirationTime设置为(Now + 4秒)。
但实际上你不需要过期时间。如果这是更改值的唯一方法,那么它永远不会过期。