一个典型的信息类Web网站,我们知道类似于Enyim.Caching这样的dll在类初始化的就已经建立了与缓存服务器Memcached的TCP链接,我想问一下,我们需要在数据访问层上,进行一个包装或改造,先去访问缓存,未命中再去访问数据库,那么对于那么多业务的数据访问接口,是采用单例模式初始化一个Enyim.Caching的Memcached的client公用一个TCP链接呢(即长连接),还是每个数据访问接口的内部都会New一个Enyim.Caching的实例(即短连接)?
EnyimMecached的初始化成本很高,我们是这样实现的,而且久经实际的检验:
internal class MemoryCache : ICache { static MemcachedClient client; static MemoryCache() { try { client = new MemcachedClient(); } catch (Exception ex) { Logging.Logger.Default.Error("MemcachedClient Initialize", ex); } } }
意思是所有会话的业务逻辑全部走一个MemcachedClient实例?这个我一开始也是这么设计的,后来我思考了通常访问Sqlserver也是短连接就修改了方案,这样单例的话,在并发量上来的时候会不会有没有吞吐量上的欠缺?
@乐活的CodeMonkey: 这是线程安全的,吞吐量上会有什么欠缺?
@乐活的CodeMonkey: sql server 是长连接。
用连接池