Springboot整合Memcached

一、首先我們使用Centos架設memcached服務器,我們使用Docker來架設Memcached服務

1. 拉取鏡像

docker pull memcached:1.5.16

2. 啓動容器

docker run --name memcached -p 11211:11211 -d memcached:1.5.16 memcached -m 128

好了,使用docker架設memcached服務器就完成了。

二、建立一個Springboot項目。

1. 增加pom依賴

        <dependency>
            <groupId>commons-pool</groupId>
            <artifactId>commons-pool</artifactId>
            <version>1.5.6</version>
        </dependency>

        <!-- memcached -->
        <dependency>
            <groupId>com.danga</groupId>
            <artifactId>java_memcached-release</artifactId>
            <version>2.6.6</version>
        </dependency>

注意:這樣做你會發現依賴庫根本找不到。這是因爲maven中心倉庫根本就沒有。

我們可以在網上搜索commons-pool-1.5.6.jar和java_memcached-release_2.6.6.jar,解壓到指定文件夾,然後在該文件夾下執行cmd命令:

mvn install:install-file -DgroupId=commons-pool -DartifactId=commons-pool -Dversion=1.5.6 -Dpackaging=jar -Dfile=commons-pool-1.5.6.jar

mvn install:install-file -DgroupId=com.danga -DartifactId=java_memcached-release -Dversion=2.6.6 -Dpackaging=jar -Dfile=java_memcached-release_2.6.6.jar

這兩個包就被安裝到了你本地的maven倉庫中,然後刷新一下項目pom依賴,就正常了。 

 

 

2. 修改port

3. 創建兩個文件

MemCachedConfig.java用來配置memcached

package com.chris.memcached;

import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * create by: Chris Chan
 * create on: 2019/11/28 17:04
 * use for: MemCached配置
 */
@Configuration
public class MemCachedConfig {
    private static String[] MEM_SERVERS = {"192.168.0.108:11211"};//服務器
    private static Integer[] MEM_SERVERS_WEIGHT = {1};//權重

    @Bean
    public SockIOPool sockIOPool() {
        //建立通信的連接池
        SockIOPool pool = SockIOPool.getInstance();
        //設置連接池可用cache服務器列表,服務器構成形式:ip地址+端口號
        pool.setServers(MEM_SERVERS);
        //設置連接池可用cache服務器的權重,和server數組的位置一一對應
        pool.setWeights(MEM_SERVERS_WEIGHT);
        //設置初始連接數
        pool.setInitConn(100);
        //設置最小連接數
        pool.setMinConn(20);
        //設置最大連接數
        pool.setMaxConn(100);
        //設置可用連接的最長等待時間
        pool.setMaxIdle(1000 * 30 * 30);
        //設置連接池維護線程的睡眠時間,設置爲0,維護線程不啓動
        pool.setMaintSleep(50);
        //設置Nagle算法,設置爲false,因爲通訊數據量比較大要求響應及時
        pool.setNagle(false);
        //設置socket讀取等待超時時間
        pool.setSocketTO(3000);
        //設置連接等待超時值
        pool.setSocketConnectTO(0);
        //失效轉移機制
        pool.setFailover(true);
        //狀態檢測機制
        pool.setAliveCheck(true);
        //設置完參數後,啓動pool
        pool.initialize();
        return pool;
    }

    @Bean
    public MemCachedClient memCachedClient() {
        return new MemCachedClient();
    }
}

TestApi.java用來編寫測試接口

package com.chris.memcached;

import com.danga.MemCached.MemCachedClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * create by: Chris Chan
 * create on: 2019/11/28 17:04
 * use for: 測試接口
 */
@RestController
@RequestMapping("/test")
public class TestApi {
    @Autowired
    MemCachedClient memCachedClient;

    /**
     * 綜合測試
     *
     * @return
     */
    @RequestMapping("/test")
    public String test() {
        // 放入緩存
        boolean flag = memCachedClient.set("username", "kalychen");
        System.out.println(flag);
        // 取出緩存
        Object value = memCachedClient.get("username");
        System.out.println(value);
        return String.valueOf(value);
    }

    /**
     * 寫緩存
     *
     * @param k
     * @param v
     * @return
     */
    @RequestMapping("/put")
    public Boolean put(String k, String v) {
        // 放入緩存
        boolean flag = memCachedClient.set(k, v);
        return flag;
    }

    /**
     * 讀緩存
     *
     * @param k
     * @return
     */
    @RequestMapping("/get")
    public String get(String k) {
        // 取出緩存
        Object value = memCachedClient.get(k);
        return String.valueOf(value);
    }
}

三、測試一下。

將服務運行起來。在瀏覽器輸入調用。

可以看到,得到的就是我們想要的結果。

參考資料:

https://www.cnblogs.com/GregZQ/p/8365276.html

https://www.jianshu.com/p/5d336c342d71

https://blog.csdn.net/saytime/article/details/80585370

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章