我正在考虑向我们的.net Web应用程序引入分布式缓存。
我一直在玩memcache,特别是Enyim Memcached客户端。
一切都很顺利。我可以从缓存中添加和检索项目。
例如:
MemcachedClient cache = new MemcachedClient();
cache.Store(Enyim.Caching.Memcached.StoreMode.Set, key, value, absoluteExpiration);
现在我的问题是这个。我们的应用程序很大,它已经被很多开发人员多年建立。我们的应用经常使用HttpRuntime.Cache
例如HttpRuntime.Cache.Add(...
理想情况下,我不想通过搜索来检查所有代码,并将每个'HttpRuntime.Cache.Add'更新为'cache.Store'。在将'Cache ['blah“]'替换为'cache.Get(”blah“)'时也很困难。
我错过了一招吗?有没有办法调用'HttpRuntime.Cache.Add'可以使用memcache'cache.Get'代替?在我看来,这将不需要搜索和替换。
感谢您阅读
答案 0 :(得分:0)
如果您要创建对第三方组件的依赖关系,我建议您使用自己的包装器或外观来实现此类操作。然后,您可以替换所有现有的Cache使用情况,以及何时以及如果要更改基础缓存提供程序,则只需要在一次更改代码。
public interface IHappyCache
{
object Add(string key, object value, CacheDependency dependencies,
DateTime absoluteExpiration, TimeSpan slidingExpiration,
CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback);
object this[string key] { get; set; }
}
public class HappyCache : IHappyCache
{
public object Add(string key, object value, CacheDependency dependencies,
DateTime absoluteExpiration, TimeSpan slidingExpiration,
CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback)
{
//wrapper to whatever caching mechanism you want to use
return new object();
}
public object this[string key]
{
get
{
//wrapper to whatever caching mechanism you want to use
return new object();
}
set
{
//wrapper to whatever caching mechanism you want to use
}
}
}
当然,您可能会发现必须构建该接口和实现,而不是我在这里。我建议您使用IOC容器注入您需要它的接口,以便您的测试可以使用替代实现或模拟。