Spring Boot 2.0(八):Spring Boot 整合 Memcached

純潔的微笑發表於2018-09-04

Memcached 介紹

Memcached 是一個高效能的分散式記憶體物件快取系統,用於動態Web應用以減輕資料庫負載。它通過在記憶體中快取資料和物件來減少讀取資料庫的次數,從而提高動態、資料庫驅動網站的速度。Memcached基於一個儲存鍵/值對的hashmap。其守護程式(daemon )是用C寫的,但是客戶端可以用任何語言來編寫,並通過memcached協議與守護程式通訊。

因為 Spring Boot 沒有針對 Memcached 提供對應的組建包,因此需要我們自己來整合。官方推出的 Java 客戶端 Spymemcached 是一個比較好的選擇之一。

Spymemcached 介紹

Spymemcached 最早由 Dustin Sallings 開發,Dustin 後來和別人一起創辦了 Couchbase (原NorthScale),職位為首席架構師。2014 加入 Google。

Spymemcached 是一個採用 Java 開發的非同步、單執行緒的 Memcached 客戶端, 使用 NIO 實現。Spymemcached 是 Memcached 的一個流行的 Java client 庫,效能表現出色,廣泛應用於 Java + Memcached 專案中。

依賴配置

新增依賴

pomx 包中新增 spymemcached 的引用

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

新增配置

memcache.ip=192.168.0.161
memcache.port=11211

分別配置 memcache 的 Ip 地址和 埠。

設定配置物件

建立 MemcacheSource 接收配置資訊

@Component
@ConfigurationProperties(prefix = "memcache")
public class MemcacheSource {

    private String ip;

    private int port;

    public String getIp() {
        return ip;
    }

    public void setIp(String ip) {
        this.ip = ip;
    }

    public int getPort() {
        return port;
    }

    public void setPort(int port) {
        this.port = port;
    }
}

@ConfigurationProperties(prefix = "memcache") 的意思會以 memcache.* 為開通將對應的配置檔案載入到屬性中。

啟動初始化 MemcachedClient

我們使用上一節的內容Spring Boot 2.0(七):Spring Boot 如何解決專案啟動時初始化資源,利用 CommandLineRunner 在專案啟動的時候配置好 MemcachedClient 。

@Component
public class MemcachedRunner implements CommandLineRunner {
    protected Logger logger =  LoggerFactory.getLogger(this.getClass());

    @Resource
    private  MemcacheSource memcacheSource;

    private MemcachedClient client = null;

    @Override
    public void run(String... args) throws Exception {
        try {
            client = new MemcachedClient(new InetSocketAddress(memcacheSource.getIp(),memcacheSource.getPort()));
        } catch (IOException e) {
            logger.error("inint MemcachedClient failed ",e);
        }
    }

    public MemcachedClient getClient() {
        return client;
    }

}

測試使用

@RunWith(SpringRunner.class)
@SpringBootTest
public class RepositoryTests {

  @Resource
    private MemcachedRunner memcachedRunner;

  @Test
  public void testSetGet()  {
    MemcachedClient memcachedClient = memcachedRunner.getClient();
    memcachedClient.set("testkey",1000,"666666");
    System.out.println("***********  "+memcachedClient.get("testkey").toString());
  }

}

使用中先測試插入一個 key 為 testkey ,1000 為過期時間單位為 毫秒,最後的 "666666" 為 key 對應的值。

執行測試用例 testSetGet ,控制檯輸出內容:

***********  666666

表明測試成功。

示例程式碼-github

示例程式碼-碼雲

相關文章