11

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

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

它并没有真正给我一个connect()isConnected()功能。API 提供了一个DefaultConnectionFactory但乍一看的代码,它看起来不像管理连接池。有谁知道如何在 spymemcached 或另一个 Java memcached 库中执行此操作?

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

4

3 回答 3

17

当您调用MemcachedClient构造函数时,它会自动连接到您的 memcached 服务器。没有connect()isConnected()方法。如果您失去与 Spymemcached 的连接,它将尝试为您重新连接。此外,DefaultConnectionFactory它旨在用于指定特殊的连接属性(例如散列方法和故障模式)。如果要使用连接工厂,则需要使用带有 a和 a的MemcachedClient构造函数。ConnectionFactoryList<InetSocketAddress>

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

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

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

于 2012-05-22T23:25:51.077 回答
0

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

于 2014-07-08T10:09:59.233 回答
0

有些人使用 DBCP 来汇集连接。您可以在github上查看3levelmemcache项目,它具有池化功能。

于 2014-08-18T06:25:05.570 回答