首页 新闻 会员 周边 捐助

关于缓存客户端的设计使用长连接还是短连接?

0
悬赏园豆:30 [已解决问题] 解决于 2014-01-28 15:28

一个典型的信息类Web网站,我们知道类似于Enyim.Caching这样的dll在类初始化的就已经建立了与缓存服务器Memcached的TCP链接,我想问一下,我们需要在数据访问层上,进行一个包装或改造,先去访问缓存,未命中再去访问数据库,那么对于那么多业务的数据访问接口,是采用单例模式初始化一个Enyim.Caching的Memcached的client公用一个TCP链接呢(即长连接),还是每个数据访问接口的内部都会New一个Enyim.Caching的实例(即短连接)?

乐活的CodeMonkey的主页 乐活的CodeMonkey | 初学一级 | 园豆:175
提问于:2014-01-27 12:00
< >
分享
最佳答案
0

EnyimMecached的初始化成本很高,我们是这样实现的,而且久经实际的检验:

internal class MemoryCache : ICache
{
    static MemcachedClient client;

    static MemoryCache()
    {
        try
        {
            client = new MemcachedClient();
        }
        catch (Exception ex)
        {
            Logging.Logger.Default.Error("MemcachedClient Initialize", ex);
        }
    }
}
收获园豆:30
dudu | 高人七级 |园豆:29568 | 2014-01-27 13:24

意思是所有会话的业务逻辑全部走一个MemcachedClient实例?这个我一开始也是这么设计的,后来我思考了通常访问Sqlserver也是短连接就修改了方案,这样单例的话,在并发量上来的时候会不会有没有吞吐量上的欠缺?

乐活的CodeMonkey | 园豆:175 (初学一级) | 2014-01-27 14:30

@乐活的CodeMonkey: 这是线程安全的,吞吐量上会有什么欠缺?

dudu | 园豆:29568 (高人七级) | 2014-01-27 15:30

@乐活的CodeMonkey: sql server 是长连接。

Launcher | 园豆:45050 (高人七级) | 2014-01-27 15:58
其他回答(1)
0

用连接池

菜鸟老了 | 园豆:145 (初学一级) | 2014-01-28 09:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册