我将把 spymemcached 合并到我拥有的 java servlet 中,并试图找出处理 MemcachedClient(s) 的最佳方法。我应该创建一个用于整个 servlet 的静态单例,还是每次需要使用客户端时都实例化一个新的?
问问题
473 次
2 回答
0
Spymemcached 使用单个 IO 线程,但其行为类似于多线程客户端。例如,使用一个线程,您每秒最多可以执行 50k 次操作。如果要创建线程池,则必须在用户应用程序中进行。
于 2014-01-29T15:56:35.907 回答
0
这种Singleton
模式几乎从不合适。首选Dependency Injection
或Service Locator
。
如果您使用的是低级 Java servlet,而不是像 Spring 这样的具有控制反转的 MVC 框架,您会发现 DI 会增加大量的实现开销。在这种情况下,服务定位器可能更合适。服务定位器在消费者和资源之间增加了一层间接性。例如:
MyResource resource = MyResourceLocator.resource();
这比单例更好吗?如上所示,它并没有好多少——我们仍然不希望地耦合到MyResourceLocator
类及其静态方法。我们可以稍微改进一下:
MyResource resource = MyLocator.newInstance().resource();
在这里,MyLocator
可以是一个带有静态工厂方法的抽象类,newInstance
. resource()
然后可以被不同的实现覆盖。例如,工厂方法间接允许您根据您是在生产中还是在测试中提供不同类型的定位器。MyLocator
甚至可能遵守服务提供者接口(SPI) 标准,允许第三方无缝插入并提供资源。
于 2013-07-01T19:16:19.657 回答