Skip to content

Memcached - 连接

连接 Memcached 服务器是将其用作缓存的第一步。对于基本的调试和学习,您可以使用像 telnet 这样的简单命令行工具进行连接。在您的应用程序中,您将使用特定语言的客户端库来处理协议、连接和数据序列化。

在连接之前,您需要一个正在运行的 Memcached 服务器。对于本地开发,最简单的方法是使用 Docker 启动一个。此命令将启动一个 Memcached 服务器并将其暴露在默认端口 11211 上。

docker run --name my-memcache -p 11211:11211 -d memcached:1.6-alpine

您可以使用 telnet 直接连接到 Memcached 服务器。这对于手动检查值或理解原始 Memcached 文本协议很有用。

telnet HOST PORT

此处,HOST 是服务器 IP(例如,对于 localhost 是 127.0.0.1),PORT 是端口号(通常是 11211)。

$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
# 现在您可以直接发出 Memcached 命令
# 格式: set <键> <标志> <过期时间> <字节数> [noreply]
set w3 0 900 9
memcached
STORED
get w3
VALUE w3 0 9
memcached
END

在 Java 应用程序中,您应该使用客户端库来管理连接。spymemcached 是一个流行的选择。首先,将其作为依赖项添加到您的项目中。

<dependency>
<groupId>net.spy</groupId>
<artifactId>spymemcached</artifactId>
<version>2.12.3</version>
</dependency>
import net.spy.memcached.MemcachedClient;
import java.net.InetSocketAddress;
import java.util.concurrent.Future;
import java.io.IOException;
public class MemcachedConnectionExample {
public static void main(String[] args) {
String serverAddress = "127.0.0.1";
int port = 11211;
MemcachedClient mcc = null;
try {
// 建立与 Memcached 服务器的连接
mcc = new MemcachedClient(new InetSocketAddress(serverAddress, port));
System.out.println("Connection to server successful.");
// 设置一个键值对。该操作是异步的,并返回一个 Future。
Future<Boolean> setFuture = mcc.set("w3", 900, "memcached");
// 为了确认操作,我们可以阻塞并等待结果。
if (setFuture.get()) { // .get() 等待操作完成
System.out.println("Set operation successful.");
} else {
System.err.println("Set operation failed.");
}
// 从缓存中获取值
Object value = mcc.get("w3");
System.out.println("Get from Cache: " + value);
} catch (IOException e) {
System.err.println("Couldn't establish a connection to Memcached: " + e.getMessage());
} catch (Exception e) {
// Future.get() 可能会抛出 InterruptedException 或 ExecutionException
System.err.println("An error occurred during a cache operation: " + e.getMessage());
} finally {
// 关闭客户端以释放资源和连接至关重要。
if (mcc != null) {
mcc.shutdown();
}
}
}
}
Connection to server successful.
Set operation successful.
Get from Cache: memcached

**客户端配置:**在生产环境中,只实例化一次客户端并在整个应用程序中共享(它是线程安全的)。根据您的工作负载适当配置超时和操作队列。

**安全性:**Memcached 没有内置的身份验证或加密功能。它应始终运行在受信任的私有网络中,并配置防火墙以阻止公共访问。

**错误处理:**一个健壮的应用程序必须优雅地处理缓存不可用情况。如果 Memcached 客户端无法连接,应用程序应回退到从主数据源获取数据,而不是崩溃。