我正在使用的API,spymemcached,基本上给出了
MemcachedClient memc = new MemCachedClient(new InetSocketAddress("host", port));
它实际上并没有给我connect()
或isConnected()
功能。 API提供DefaultConnectionFactory
,但首先看一下它看起来不像管理连接池的代码。有没有人知道如何在spymemcached或其他Java memcached库中执行此操作?
更一般地说 - 使我的应用程序能够容忍失去连接的最“道德”方式是什么?
答案 0 :(得分:16)
当您调用MemcachedClient
构造函数时,它会自动连接到您的memcached服务器。没有connect()
或isConnected()
方法。如果您失去与Spymemcached的连接,它将尝试为您重新连接。此外,DefaultConnectionFactory
用于指定特殊连接属性(例如散列方法和失败模式)。如果您想使用连接工厂,则需要使用MemcachedClient
和ConnectionFactory
的{{1}}构造函数。
Spymemcached使用单个IO线程,但就像一个多线程客户端。例如,使用一个线程,您每秒最多可以执行50k操作。如果要创建线程池,则必须在用户应用程序中执行此操作。
更一般地说 - 使我的应用程序能够容忍失去连接的最“道德”方式是什么?
就像我上面提到的,如果Spymemcached失去与服务器的连接,它将尝试重新连接。此过程通常需要大约17毫秒。但是,大多数使用客户端的人都会在其应用程序代码中创建一个线程池。
答案 1 :(得分:0)
您最初可以创建一个对象池。然后在执行set,delete或get操作时,您可以从池中借用对象。一旦调用其构造函数,MemcachedClient将自动连接到服务器。
答案 2 :(得分:0)
有些人使用DBCP来汇集连接。 您可以在 github 中查看 3levelmemcache 项目,该项目已合并。