如何在Java中连接池memcached(spymemcached)

时间:2012-05-21 19:40:31

标签: java memcached spymemcached

我正在使用的API,spymemcached,基本上给出了

MemcachedClient memc = new MemCachedClient(new InetSocketAddress("host", port));

它实际上并没有给我connect()isConnected()功能。 API提供DefaultConnectionFactory,但首先看一下它看起来不像管理连接池的代码。有没有人知道如何在spymemcached或其他Java memcached库中执行此操作?

更一般地说 - 使我的应用程序能够容忍失去连接的最“道德”方式是什么?

3 个答案:

答案 0 :(得分:16)

当您调用MemcachedClient构造函数时,它会自动连接到您的memcached服务器。没有connect()isConnected()方法。如果您失去与Spymemcached的连接,它将尝试为您重新连接。此外,DefaultConnectionFactory用于指定特殊连接属性(例如散列方法和失败模式)。如果您想使用连接工厂,则需要使用MemcachedClientConnectionFactory的{​​{1}}构造函数。

Spymemcached使用单个IO线程,但就像一个多线程客户端。例如,使用一个线程,您每秒最多可以执行50k操作。如果要创建线程池,则必须在用户应用程序中执行此操作。

  

更一般地说 - 使我的应用程序能够容忍失去连接的最“道德”方式是什么?

就像我上面提到的,如果Spymemcached失去与服务器的连接,它将尝试重新连接。此过程通常需要大约17毫秒。但是,大多数使用客户端的人都会在其应用程序代码中创建一个线程池。

答案 1 :(得分:0)

您最初可以创建一个对象池。然后在执行set,delete或get操作时,您可以从池中借用对象。一旦调用其构造函数,MemcachedClient将自动连接到服务器。

答案 2 :(得分:0)

有些人使用DBCP来汇集连接。 您可以在 github 中查看 3levelmemcache 项目,该项目已合并。