发表于: 2017-08-28 23:14:03
2 1265
今天做的事:
今天讲小课堂花了点时间,然后就是晚上开始使用Memcache,引用jar包,并使用一个MemcacheUtil实现存取数据
首先是jar包的问题,Memcache在maven仓库中是没有相应的jar包的,需要我们手动下载,手动导入,寻找这个花了很长时间,终于找到一篇靠谱的博文:
http://www.cnblogs.com/mycifeng/p/5882509.html
这里记录一下Memcache的下载地址
https://github.com/gwhalin/Memcached-Java-Client/downloads
然后其他的就按照这篇博文操作就可以了,关键点还是pom文件如何引用jar包,而且memcached这个jar包是和几个jar包关联的,就是下载后会看到四个jar包,必须都要添加依赖
pom文件如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>memcached</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>com.danga</groupId>
<artifactId>memcached</artifactId>
<version>2.6.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>1.5.6</version>
</dependency>
</dependencies>
</project>
还有这篇博文里的一个操作挺神奇的,也不知道好不好使,反正最后我手动导入文件,也使用cmd敲命令了,反正最后pom文件中可用了
这个命令挺长的,其实就是pom文件添加jar包依赖,不过从来没用过,挺新鲜的。
接下来就是写MemcacheUtil工具类,并测试是否能存储数据了
这个工具类挺长的,就不贴代码了,贴个挺好的博客,也是copy了一手
http://blog.csdn.net/sup_heaven/article/details/32337711
测试类的存储数据如下(改一下测试代码中的i最大值,一千万太大了,要运行很久,我后来改成100)
测试后,可以通过该工具类存取数据。
测试类中使用了一个对象和方法
Assert.assertEquals([String message],expected,actual)
参数说明:
message是个可选的消息,假如提供,将会在发生错误时报告这个消息。
expected是期望值,通常都是用户指定的内容。
actual是被测试的代码返回的实际值。
用处就像这样:(用来检验错误)
最后,注意点:
第一、memcached是在服务器端的内存中缓存对象的,不是缓存或硬盘;
第二、memcached的pool可以关联多个server,
String[] servers = {"10.20.185.12:11001","10.20.185.25:11001"};
Integer[] weights = {3,7};
该配置表示30%的缓存在放在第一台服务器,70%的将放在第二台服务器,这样便可以充分利用不同服务器的内存了;
第三、我最困惑的是client是如何得到相应的pool的,后然看了点源码才知道是这样的。client是通过pool的name关联到某个pool的,上面的例子中在SockIOPool pool = SockIOPool.getInstance(); 和MemCachedClient client=new MemCachedClient();虽然都没写poolName,但就是新建了一个”default“的pool,然后client关联到了这个”default“的pool。当然我们在新建这两个对象时可以给定具体的poolName。
明天计划:将Memcache添加到之前的任务代码中,并且跑通。
问题:这个工具类里涉及了很多新知识,但是具体并没有了解,而且里面还涉及到序列化等等的东西,都还没有看,看来这个如果要学习的话,要花点时间,不过现在先用着吧,以后再研究。
简单说一下序列化:
一般程序在运行时,产生对象,这些对象随着程序的停止运行而消失,但如果我们想把某些对象(因为是对象,所以有各自不同的特性)保存下来,在程序终止运行后,这些对象仍然存在,可以在程序再次运行时读取这些对象的值,或者在其他程序中利用这些保存下来的对象。这种情况下就要用到对象的序列化。
只有序列化的对象才可以存储在存储设备上。为了对象的序列化而需要继承的接口也只是一个象征性的接口而已,也就是说继承这个接口说明这个对象可以被序列化了,没有其他的目的。之所以需要对象序列化,是因为有时候对象需要在网络上传输,传输的时候需要这种序列化处理,从服务器硬盘上把序列化的对象取出,然后通过网络传到客户端,再由客户端把序列化的对象读入内存,执行相应的处理。
摘自这篇博客:http://disablebb.iteye.com/blog/1137869
收获:使用MemcacheUtil存取数据。
进度:开始时间:2017.08.25
预计demo:2017.08.30
是否有延期风险:未知,先放着看看,延期另说
禅道链接:http://task.ptteng.com/zentao/project-task-285-unclosed.html
评论