将Memcache挂钩到.NET Web应用程序中

时间:2013-09-13 10:57:38

标签: c# asp.net caching memcached

我正在考虑向我们的.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'代替?在我看来,这将不需要搜索和替换。

感谢您阅读

1 个答案:

答案 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容器注入您需要它的接口,以便您的测试可以使用替代实现或模拟。