2019独角兽企业重金招聘Python工程师标准>>>

文章共 727字,阅读大约需要 2分钟 !


概 述

EVCache 是 Netflix开源的分布式缓存系统,基于 Memcached缓存和 Spymemcached客户端实现,其用在了大名鼎鼎的 AWS亚马逊云上,并且为云计算做了优化,提供高效的缓存服务。

本文利用 Memcached作为后端缓存实例服务器,并结合 Spring Boot,来实践一下 EVCache客户端的具体使用。

注: 本文首发于 My Personal Blog:CodeSheep·程序羊,欢迎光临 小站


编译 EVCache

  • 第一步:Clone
git clone git@github.com:Netflix/EVCache.git
  • 第二步:编译构建
 ./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:buildBUILD SUCCESSFULTotal time: 22.866 secs
  • 第三步:得到构建生成物

同时 ~/EVCache/evcache-client/build/reports 目录下会生成相应构建报告:

接下来我们结合 Spring工程,来实战一下 EVCache Client的具体使用。


环境准备 / 工程搭建

首先准备好两台 memcached实例:

  • 192.168.199.77:11211
  • 192.168.199.78:11211

接下来搭建一个SpringBoot工程,过程不再赘述,需要注意的一点是 pom中需加入 EVCache的依赖支持

<dependency><groupId>com.netflix.evcache</groupId><artifactId>evcache-client</artifactId><version>4.137.0-SNAPSHOT</version>
</dependency>

注:我将 Spring工程设置在 8899端口启动


EVCache Client导入

  • 编写 EVCache Client包装类
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容器中

@Configuration
public class EVCacheConfig {@Beanpublic EVCacheClient evcacheClient() {EVCacheClient evCacheClient = new EVCacheClient();return evCacheClient;}
}

编写 EVCache Service

上面几步完成之后,Service的编写自然顺理成章,仅仅是一层封装而已

@Service
public class EVCacheService {@Autowiredprivate 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,从而便于观察实验结果

@RestController
public class EVCacheTestController {@Autowiredprivate 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条测试数据

  • 从后端 memcached集群中读取刚插入的 10条数据

  • 为了验证数据确实写入到后端 memcached,我们可以 telnet到后端 memcached中进行一一验证

而且这些数据的有效时间仅3分钟,3分钟后再次验证会发现数据已过期

[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等服务发现服务进行一个结合,实现灵活运用,这就不在本文进行赘述。


后 记

由于能力有限,若有错误或者不当之处,还请大家批评指正,一起学习交流!

  • My Personal Blog:CodeSheep 程序羊
  • 我的半年技术博客之路


转载于:https://my.oschina.net/hansonwang99/blog/2967146

EVCache缓存在 Spring Boot中的实战相关推荐

  1. 在Spring Boot中使用数据缓存

    关注公众号[江南一点雨],专注于 Spring Boot+微服务以及前后端分离等全栈技术,定期视频教程分享,关注后回复 Java ,领取松哥为你精心准备的 Java 干货! 春节就要到了,在回家之前要 ...

  2. 如何在Spring Boot中玩转智能合约【修订版】

    本文是由链博科技 ChainBoard.IO 为大家带来的web3j 对智能合约的调用.让 java 程序可以和我们的智能合约愉快的交互起来~ 一. 什么是 web3j web3j是一个高度模块化.响 ...

  3. 如何在Spring Boot中玩转智能合约

    本文是由链博科技 ChainBoard.IO 为大家带来的web3j 对智能合约的调用.让 java 程序可以和我们的智能合约愉快的交互起来~ 一.什么是 web3j web3j是一个高度模块化.响应 ...

  4. Spring Boot 揭秘与实战(二) 数据缓存篇 - EhCache

    文章目录 1. EhCache 集成 2. 源代码 本文,讲解 Spring Boot 如何集成 EhCache,实现缓存. 在阅读「Spring Boot 揭秘与实战(二) 数据缓存篇 - 快速入门 ...

  5. Spring Boot中使用MongoDB数据库

    MongoDB简介 MongoDB是一个基于分布式文件存储的数据库,它是一个介于关系数据库和非关系数据库之间的产品,其主要目标是在键/值存储方式(提供了高性能和高度伸缩性)和传统的RDBMS系统(具有 ...

  6. springboot(三):Spring boot中Redis的使用

    转自www.ityouknow.com spring boot对常用的数据库支持外,对nosql 数据库也进行了封装自动化. redis介绍 Redis是目前业界使用最广泛的内存数据存储.相比memc ...

  7. Spring Boot Redis Cluster 实战干货

    转载自  Spring Boot Redis Cluster 实战干货 添加配置信息 spring.redis:database: 0 # Redis数据库索引(默认为0)#host: 192.168 ...

  8. Spring Boot中使用Redis数据库

    Spring Boot中除了对常用的关系型数据库提供了优秀的自动化支持之外,对于很多NoSQL数据库一样提供了自动化配置的支持,包括:Redis, MongoDB, Elasticsearch, So ...

  9. (转)Spring Boot(三):Spring Boot 中 Redis 的使用

    http://www.ityouknow.com/springboot/2016/03/06/spring-boot-redis.html Spring Boot 对常用的数据库支持外,对 Nosql ...

最新文章

  1. 1136 A Delayed Palindrome 需再做
  2. linux系统编程:自己动手写一个cp命令
  3. 突然感到很无聊当没有看书时
  4. sql server 怎么把视图中的数据存到另外一张表中_承上篇,自制插件优化Kep数据存储问题...
  5. 基于matlab的语音信号基本处理系统,基于matlab的语音信号处理及分析
  6. ObjectDataSource与GridView配合使用经验总结系列二:分页
  7. Node.js设置CORS跨域请求中多域名白名单的方法
  8. Xcode 8.1 : Unable to read from device
  9. 幕墙计算软件_案例BIM在玻璃幕墙参数化设计的应用
  10. 使用python来读取超大型文件数据
  11. jsp:setProperty getProperty标签的使用
  12. 体育馆预约系统java_基于SSM框架下的JAVA体育场地预约系统
  13. 详解sqlserver 执行计划
  14. python Socket网络编程
  15. Java垃圾回收机制知识点总结
  16. 解析《啊哈C》--最终章:用C语言制作走迷宫和推箱子的小游戏
  17. AT绑定句柄无效和拒绝访问
  18. c语言strlen转义字符,转义字符 sizeof strlen
  19. MySQL数据库必会的增删查改操作(CRUD)
  20. Julia-第一章简介和资源汇总

热门文章

  1. [VB]在状态栏中显示帮助信息
  2. SCPPO(三):禅道的使用—项目管理员、开发等人员
  3. 机房收费系统个人重构版:暮然回首,灯火阑珊
  4. CCF业务总部和学术交流中心落户苏州相城
  5. 十分钟,我搞定了一个人物检测模型
  6. LeCun:深度学习在信号理解中的强大和局限(视频+PPT)
  7. 合作 | IEIC·IT耳朵智能创新大会:人工智能落地将带来新风口
  8. 2018年IEEE Fellow名单:32位中国学者入选,清华成最大赢家
  9. JS+XMLDOM+XSL:实现中英文界面切换、排序、分页显示、增删改查XML文件数据源
  10. 摩拜前端周刊第10期