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

Java 整合 Memcached 入門教學:安裝、SpyMemcached 客戶端、監控指令

     編輯:Java 相關知識

前言

Memcached 是高效能分散式記憶體快取系統,廣泛用於緩解資料庫壓力。本文以 Ubuntu 為例,涵蓋安裝、啟動、Java 客戶端基本操作與監控。

1. 伺服器安裝與啟動 (Ubuntu)

# 安裝
sudo apt-get update && sudo apt-get install memcached

# 啟動參數說明
# -p 端口 (預設 11211)
# -m 記憶體上限 (MB)
# -d 背景守護進程
# -vv 詳細日誌(除錯用)
memcached -p 11211 -m 512 -d

# 測試連線
telnet localhost 11211
# 輸入 stats 查看統計
# 輸入 quit 退出

2. Maven 依賴

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

3. 客戶端封裝工具類

import net.spy.memcached.*;
import java.util.concurrent.*;

public class MemcachedClientUtil {
    private static final MemcachedClient client;
    
    static {
        try {
            // 多節點支援
            client = new MemcachedClient(
                new ConnectionFactoryBuilder()
                    .setProtocol(ConnectionFactoryBuilder.Protocol.BINARY)
                    .build(),
                AddrUtil.getAddresses("127.0.0.1:11211 192.168.1.10:11211")
            );
        } catch (IOException e) {
            throw new ExceptionInInitializerError("Memcached 初始化失敗: " + e.getMessage());
        }
    }
    
    public static void set(String key, String value, int expSeconds) {
        try {
            client.set(key, expSeconds, value).get(2, TimeUnit.SECONDS);
        } catch (Exception e) {
            throw new RuntimeException("Set 失敗", e);
        }
    }
    
    public static String get(String key) {
        try {
            Object val = client.get(key);
            return val != null ? val.toString() : null;
        } catch (Exception e) {
            throw new RuntimeException("Get 失敗", e);
        }
    }
    
    public static void delete(String key) {
        try { client.delete(key).get(); } catch (Exception e) { throw new RuntimeException(e); }
    }
    
    public static void shutdown() {
        client.shutdown(5, TimeUnit.SECONDS);
    }
}

4. 使用範例

// 寫入,過期 1 小時
MemcachedClientUtil.set("user:1001", "{\"name\":\"Tom\",\"age\":28}", 3600);

// 讀取
String json = MemcachedClientUtil.get("user:1001");
System.out.println(json);

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

5. 監控與運維指令

# 即時監控 stats
watch "echo stats | nc 127.0.0.1 11211"

# 關鍵指標
# curr_items: 當前項目數
# bytes: 佔用記憶體
# get_hits / get_misses: 命中/未命中
# evictions: 驅逐數(記憶體不足時)
# limit_maxbytes: 最大記憶體限制

6. 常見問題與優化

  • Timeout:高併發下調大 setOpTimeout、getOpTimeout,或增加節點分散壓力。
  • 序列化:預設 Java 序列化體積大、慢,建議改用 JSON (Jackson/Gson) 或 Protobuf。
  • Key 設計:加前綴區分業務(如 user:、order:),設定合理 TTL 避免永久佔用。
  • 一致性哈希:SpyMemcached 內建 Ketama 算法,客戶端自動路由,無需 Proxy。

7. 進階:Spring 整合

<bean id="memcachedClient" class="net.spy.memcached.MemcachedClient" destroy-method="shutdown">
    <constructor-arg>
        <bean class="net.spy.memcached.AddrUtil" factory-method="getAddresses">
            <constructor-arg value="${memcached.servers}" />
        </bean>
    </constructor-arg>
</bean>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved