一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - EVCache緩存在Spring Boot中的實戰示例

EVCache緩存在Spring Boot中的實戰示例

2021-06-18 14:31CodeSheep Java教程

這篇文章主要介紹了EVCache緩存在Spring Boot中的實戰示例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

概 述

evcache 是 netflix開源的分布式緩存系統,基于 memcached緩存和 spymemcached客戶端實現,其用在了大名鼎鼎的 aws亞馬遜云上,并且為云計算做了優化,提供高效的緩存服務。

本文利用 memcached作為后端緩存實例服務器,并結合 spring boot,來實踐一下 evcache客戶端的具體使用。

編譯 evcache

第一步:clone

?
1
git clone git@github.com:netflix/evcache.git

第二步:編譯構建

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
./gradlew build
downloading https://services.gradle.org/distributions/gradle-2.10-bin.zip
.................................................................................................................................
 
...
 
:evcache-client:check
:evcache-client:build
:evcache-client-sample:writelicenseheader
:evcache-client-sample:licensemain
missing header in: evcache-client-sample/src/main/java/com/netflix/evcache/sample/evcacheclientsample.java
:evcache-client-sample:licensetest up-to-date
:evcache-client-sample:license
:evcache-client-sample:compiletestjava up-to-date
:evcache-client-sample:processtestresources up-to-date
:evcache-client-sample:testclasses up-to-date
:evcache-client-sample:test up-to-date
:evcache-client-sample:check
:evcache-client-sample:build
 
build successful
 
total time: 22.866 secs

第三步:得到構建生成物

EVCache緩存在Spring Boot中的實戰示例

同時 ~/evcache/evcache-client/build/reports 目錄下會生成相應構建報告:

EVCache緩存在Spring Boot中的實戰示例

接下來我們結合 spring工程,來實戰一下 evcache client的具體使用。

環境準備 / 工程搭建

首先準備好兩臺 memcached實例:

  • 192.168.199.77:11211
  • 192.168.199.78:11211

接下來搭建一個springboot工程,過程不再贅述,需要注意的一點是 pom中需加入 evcache的依賴支持

?
1
2
3
4
5
<dependency>
  <groupid>com.netflix.evcache</groupid>
  <artifactid>evcache-client</artifactid>
  <version>4.137.0-snapshot</version>
</dependency>
注:我將 spring工程設置在 8899端口啟動

evcache client導入

編寫 evcache client包裝類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class evcacheclient {
 
  private final evcache evcache;  // 關鍵角色在此
 
  public evcacheclient() {
    string deploymentdescriptor = system.getenv("evc_sample_deployment");
    if ( deploymentdescriptor == null ) {
      deploymentdescriptor = "servergroup1=192.168.199.77:11211;servergroup2=192.168.199.78:11211";
    }
    system.setproperty("evcache_app1.use.simple.node.list.provider", "true");
    system.setproperty("evcache_app1-nodes", deploymentdescriptor);
    evcache = new evcache.builder().setappname("evcache_app1").build();
  }
 
  public void setkey(string key, string value, int timetolive) throws exception {
    try {
      future<boolean>[] _future = evcache.set(key, value, timetolive);
      for (future<boolean> f : _future) {
        boolean didsucceed = f.get();
        // system.out.println("per-shard set success code for key " + key + " is " + didsucceed);
        // 此處可以針對 didsucceed做相應判斷
      }
      system.out.println("finished setting key " + key);
    } catch (evcacheexception e) {
      e.printstacktrace();
    }
  }
 
  public string getkey(string key) {
    try {
      string _response = evcache.<string>get(key);
      return _response;
    } catch (exception e) {
      e.printstacktrace();
      return null;
    }
  }
 
}

很明顯上述類主要提供了兩個關鍵工具函數: setkeygetkey

evcache config 配置導入

我們將 evcacheclient 注入到spring容器中

?
1
2
3
4
5
6
7
8
9
@configuration
public class evcacheconfig {
 
  @bean
  public evcacheclient evcacheclient() {
    evcacheclient evcacheclient = new evcacheclient();
    return evcacheclient;
  }
}

編寫 evcache service

上面幾步完成之后,service的編寫自然順理成章,僅僅是一層封裝而已

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@service
public class evcacheservice {
 
  @autowired
  private evcacheclient evcacheclient;
 
  public void setkey( string key, string value, int timetolive ) {
    try {
      evcacheclient.setkey( key, value, timetolive );
    } catch (exception e) {
      e.printstacktrace();
    }
  }
 
  public string getkey( string key ) {
    return evcacheclient.getkey( key );
  }
}

編寫測試 controller

我們編寫一個方便用于測試的控制器,里面進行一系列對于緩存的 setget,從而便于觀察實驗結果

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@restcontroller
public class evcachetestcontroller {
 
  @autowired
  private evcacheservice evcacheservice;
 
  @getmapping("/testevcache")
  public void testevcache() {
 
    try {
 
      for ( int i = 0; i < 10; i++ ) {
        string key = "key_" + i;
        string value = "data_" + i;
        int ttl = 180;      // 此處將緩存設為三分鐘(180s)生存期,時間一過,緩存即會失效
        evcacheservice.setkey(key, value, ttl);
      }
 
      for (int i = 0; i < 10; i++) {
        string key = "key_" + i;
        string value = evcacheservice.getkey(key);
        system.out.println("get of " + key + " returned " + value);
      }
      
    } catch (exception e) {
      e.printstacktrace();
    }
 
  }
}

實驗驗證

工程啟動后,我們調用 rest接口:localhost:8899/testevcache,觀察控制臺中對于 key_0key_9 等十個緩存 key的操作細節如下:

在 memcached集群中插入十條數據: key_0key_9

注意此處是向每個后端 memcached緩存實例中都寫入了 10條測試數據

EVCache緩存在Spring Boot中的實戰示例

從后端 memcached集群中讀取剛插入的 10條數據

EVCache緩存在Spring Boot中的實戰示例

為了驗證數據確實寫入到后端 memcached,我們可以 telnet到后端 memcached中進行一一驗證

而且這些數據的有效時間僅3分鐘,3分鐘后再次驗證會發現數據已過期

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
[root@localhost ~]# telnet 127.0.0.1 11211
trying 127.0.0.1...
connected to 127.0.0.1.
escape character is '^]'.
get key_0
value key_0 0 6
data_0
end
get key_1
value key_1 0 6
data_1
end
get key_2   
value key_2 0 6
data_2
end
get key_3
value key_3 0 6
data_3
end
get key_4
value key_4 0 6
data_4
end
get key_5
value key_5 0 6
data_5
end
get key_6
value key_6 0 6
data_6
end
get key_7
value key_7 0 6
data_7
end
get key_8
value key_8 0 6
data_8
end
get key_9
value key_9 0 6
data_9
end

本文擴展

當然本文所演示的 evcache配合 memcached使用時,memcached被硬編碼進代碼,實際過程中使用,可以將其與 zk等服務發現服務進行一個結合,實現靈活運用,這就不在本文進行贅述。

EVCache緩存在Spring Boot中的實戰示例

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://segmentfault.com/a/1190000017242987

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 午夜福利合集1000在线 | 男人女人日皮视频 | 欧美乱强 | 国产欧美日韩精品在线 | 久久国产免费 | 国内在线观看 | 桃乃木香奈ipx在线播放 | 日本一卡二卡3卡四卡网站精品 | 99国产在线视频 | 日本在线观看免费高清 | 久久全国免费观看视频 | 天天色视频 | 国产欧美曰韩一区二区三区 | 国产在线一区二区视频 | 日本一卡二卡3卡四卡网站精品 | 韩国最新三级网站在线播放 | gayxxx视频| 国产午夜亚洲精品一区网站 | 国产精品露脸国语对白99 | 日韩成人在线网站 | ffee性xxⅹ另类老妇hd | 特黄级 | 国产成人综合一区人人 | 97精品国产自在现线免费观看 | 国产欧美一区二区精品性色99 | 国产青草视频在线观看免费影院 | xxxxx性13一14| 精品综合久久久久久8888 | 亚洲天堂成人在线观看 | 9re视频这里只有精品 | 手机在线观看精品国产片 | 亚洲狼人香蕉香蕉在线28 | 三级无删减高清在线影院 | 亚洲小视频网站 | 久久午夜一区二区 | 激情小说色图 | 国内精品久久久久影院男同志 | 校园高h | 国产成人精品免费2021 | 女人张开腿让男人做爽爽 | 好大好硬抽搐好爽想要 |