首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Memcached Java 客戶端完整入門:從安裝到分散式快取實戰

     編輯:Java 相關知識

什麼是 Memcached?

高效能、分散式、記憶體型 Key-Value 快取系統。特點:簡單協定、多執行緒、LRU 淘汰、無單點故障(客戶端一致性雜湊)。廣泛用於 Wikipedia、YouTube、WordPress 等大型網站。

Windows 快速安裝與驗證

  1. 下載 memcached-1.2.6-win32-bin.zip 解壓
  2. 安裝為服務:memcached.exe -d install
  3. 啟動服務:memcached.exe -d start 或服務管理器啟動
  4. 驗證:telnet 127.0.0.1 11211 連線成功顯示版本資訊

核心協定指令

指令格式說明
setset key flags exptime bytes\r\nvalue\r\n儲存資料
getget key\r\n讀取資料
add同 set鍵不存在才儲存
replace同 set鍵存在才更新
deletedelete key\r\n刪除鍵
statsstats\r\n查看統計資訊

參數說明:flags 客戶端自定義標記、exptime 過期秒數(0=永久)、bytes 值長度。

Java 客戶端:SpyMemcached / XMemcached 推薦

原文使用的 com.danga.MemCached 已停止維護。現代專案建議:

  • SpyMemcached:非同步 IO、支援二進制協定、Spring 整合完善
  • XMemcached:輕量、支援一致性雜湊、Alibaba 維護

SpyMemcached 實戰範例

Maven 依賴

<dependency>
    <groupId>net.spy</groupId>
    <artifactId>spymemcached</artifactId>
    <version>2.12.3</version>
</dependency>

基本操作

// 1. 建立客戶端(單例)
MemcachedClient client = new MemcachedClient(
    new BinaryConnectionFactory(),
    AddrUtil.getAddresses("localhost:11211")
);

// 2. 設定資料(非同步回傳 Future)
Future<Boolean> setFuture = client.set("user:1001", 3600, new User(1001, "Alice"));
setFuture.get(); // 同步等待結果

// 3. 取得資料
User user = client.get("user:1001");

// 4. 刪除
client.delete("user:1001");

// 5. 關閉(應用關閉時)
client.shutdown();

Spring Boot 整合

@Configuration
public class MemcachedConfig {
    @Value("${memcached.servers}")
    private String servers;

    @Bean
    public MemcachedClient memcachedClient() throws IOException {
        return new MemcachedClient(
            new BinaryConnectionFactory(),
            AddrUtil.getAddresses(servers)
        );
    }
}
@Service
@RequiredArgsConstructor
public class CacheService {
    private final MemcachedClient client;

    public void set(String key, int exp, Object value) {
        client.set(key, exp, value);
    }

    public <T> T get(String key, Class<T> clazz) {
        return client.get(key);
    }
}

進階主題

主題重點
一致性雜湊客戶端演算法決定 Key 分佈,伺服器增減只影響少量 Key 遷移
序列化預設 Java 序列化,建議改用 Kryo/Protobuf/JSON 提升效能與跨語言相容
壓縮大於閾值(如 1KB)自動 GZIP 壓縮
故障轉移伺服器失效時自動重新雜湊,配合 failover 設定
監控指標hit rate、evictions、curr_items、bytes、cmd_get/set

常見陷阱

  • 大物件:單值超過 1MB 會被拒絕,需拆分或壓縮
  • 鍵長度:超過 250 字元會被截斷,建議加前綴命名空間
  • 連線洩漏:務必在應用關閉時呼叫 shutdown()
  • 熱鍵:單一 Key 高併發導致熱點,需本地快取(Caffeine)二級緩衝

結語

Memcached 以極致簡單換取極致效能,是分散式快取的經典選擇。Java 生態中請棄用舊版 danga 客戶端,改用 SpyMemcached 或 XMemcached,並配合 Spring Boot 整合、序列化優化、監控告警,構建生產級快取層。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved