发表于: 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






返回列表 返回列表
评论

    分享到