Memcached - 连接
Memcached - 连接
Section titled “Memcached - 连接”连接 Memcached 服务器是将其用作缓存的第一步。对于基本的调试和学习,您可以使用像 telnet 这样的简单命令行工具进行连接。在您的应用程序中,您将使用特定语言的客户端库来处理协议、连接和数据序列化。
前置条件:运行 Memcached 实例
Section titled “前置条件:运行 Memcached 实例”在连接之前,您需要一个正在运行的 Memcached 服务器。对于本地开发,最简单的方法是使用 Docker 启动一个。此命令将启动一个 Memcached 服务器并将其暴露在默认端口 11211 上。
docker run --name my-memcache -p 11211:11211 -d memcached:1.6-alpine通过命令行连接(用于调试)
Section titled “通过命令行连接(用于调试)”您可以使用 telnet 直接连接到 Memcached 服务器。这对于手动检查值或理解原始 Memcached 文本协议很有用。
telnet HOST PORT此处,HOST 是服务器 IP(例如,对于 localhost 是 127.0.0.1),PORT 是端口号(通常是 11211)。
$ telnet 127.0.0.1 11211Trying 127.0.0.1...Connected to 127.0.0.1.Escape character is '^]'.
# 现在您可以直接发出 Memcached 命令# 格式: set <键> <标志> <过期时间> <字节数> [noreply]set w3 0 900 9memcachedSTORED
get w3VALUE w3 0 9memcachedEND使用现代 Java 客户端连接
Section titled “使用现代 Java 客户端连接”在 Java 应用程序中,您应该使用客户端库来管理连接。spymemcached 是一个流行的选择。首先,将其作为依赖项添加到您的项目中。
Maven 依赖
Section titled “Maven 依赖”<dependency> <groupId>net.spy</groupId> <artifactId>spymemcached</artifactId> <version>2.12.3</version></dependency>Java 示例
Section titled “Java 示例”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生产环境最佳实践
Section titled “生产环境最佳实践”**客户端配置:**在生产环境中,只实例化一次客户端并在整个应用程序中共享(它是线程安全的)。根据您的工作负载适当配置超时和操作队列。
**安全性:**Memcached 没有内置的身份验证或加密功能。它应始终运行在受信任的私有网络中,并配置防火墙以阻止公共访问。
**错误处理:**一个健壮的应用程序必须优雅地处理缓存不可用情况。如果 Memcached 客户端无法连接,应用程序应回退到从主数据源获取数据,而不是崩溃。