0

所以现在我进入了一个由我负责的项目。

我发现实现一半的部分是服务层缓存。显然,服务层中的缓存是为了避免对数据库集群进行大量调用。如果一台服务器出现故障,服务层托管在两台服务器上,以确保性能和稳定性。

现在我的问题,或者更确切地说,实现定时缓存的最佳模式是什么?很少更改或更新的对象(例如国家/地区等)会被缓存,如果没有重置池,则永远不会真正释放。

因为我们,或者更确切地说是我的前辈,在两台不同的机器上有两个活动服务,所以我正在考虑实现一个定时缓存。另一种选择是让服务相互交谈,但当然要考虑到它们不相互依赖,这样如果一个服务出现故障,另一个就可以正常工作。

现在有 12 个包含缓存项目的字典。其中大部分很少更新。这些字典驻留在一个类中,该类不是单例,而是作为单例实现,因此只实例化一次。

你如何建议我解决这个有趣的问题,为什么要这样?

4

3 回答 3

1

为什么不使用以下缓存技术之一设置由一台或多台服务器组成的缓存集群:

这样您就不必担心运行两个服务做同样的事情。

这两种技术都支持在指定的时间内缓存对象。

例如:

public void Add(string key, object value, TimeSpan timeout)
{
    //...
}

或者您可以选择无限期地缓存它们。

支持冗余。请注意小字体。

AppFabric 冗余

早在 2010 年,我写了一些关于 AppFabric 和 NCache 的文章。

两者都提供了一个简单且相似的 API 来使用。

于 2012-06-05T10:40:52.860 回答
1

MemCached是另一个。MemCached 针对分布式架构,例如您描述的架构。我使用Paul Glavic编写的适配器,他在此处写了一篇文章,演示了如何使用它。

Glavs 适配器将允许您在未来将缓存实现从 Aspnet 缓存切换到 MemCached 或 AppFabric。

该适配器还以 ICacheProvider 的形式提供了一个不错的 API:

var data1 = cacheProvider.Get<SomeData>("cache-key", DateTime.Now.AddHours(1), () =>
{
    // With the cache disabled, this data access code is executed every attempt to
    // get this data via the CacheProvider.
    var someData = new SomeData() { SomeText = "cache example1", SomeNumber = 1 };
    return someData;
});
于 2012-06-05T10:47:36.550 回答
0

ASP.Net 已经内置了一个相当不错的缓存系统。你不能使用它有什么原因吗?

它支持缓存的定时刷新,通过外部事件刷新,可以配置为使用内存、数据库、单独的缓存服务器、分布式缓存等。你应该没有理由自己制作:-)

于 2012-06-05T07:01:28.140 回答