发表于: 2018-01-13 22:29:38

1 734


今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin) 

今天对memcache进行了学习和使用.

首先需要在服务端进行安装.

这是官方教程,恩,很简洁,很直观.

然后在客户端,也就是我们的webapp中.

我使用的是和spring整合的xmemcached.

这是需要的jar包

<!-- https://mvnrepository.com/artifact/com.googlecode.xmemcached/xmemcached -->
<dependency>
 <groupId>com.googlecode.xmemcached</groupId>
 <artifactId>xmemcached</artifactId>
 <version>2.4.0</version>
</dependency>

memcache的配置文件:

预留了2个集群.(在配置文件中只会读取第一个的数据,并没有什么影响)

# the pool size(the number of client)
memcached.connectionPoolSize=50
# in this mode, when a node out, it will throws MemcachedException when call this node
memcached.failureMode=true
#server1
memcached.server1.host=120.79.4.239
memcached.server1.port=11211
memcached.server1.weight=1
#server2
memcached.server2.host=192.168.88.141
memcached.server2.port=11211
memcached.server2.weight=1
#server3
memcached.server3.host=192.168.88.142
memcached.server3.port=11211
memcached.server3.weight=1


这是spring的配置文件

<bean id="memcachedClientBuilder" class="net.rubyeye.xmemcached.XMemcachedClientBuilder"
     p:connectionPoolSize="${memcached.connectionPoolSize}" p:failureMode="${memcached.failureMode}">
   <!-- XMemcachedClientBuilder have two arguments.First is server list,and
       second is weights array. -->
   <constructor-arg>
       <list>
           <bean class="java.net.InetSocketAddress">
               <constructor-arg>
                   <value>${memcached.server1.host}</value>
               </constructor-arg>
               <constructor-arg>
                   <value>${memcached.server1.port}</value>
               </constructor-arg>
           </bean>

       </list>
   </constructor-arg>
   <constructor-arg>
       <list>
           <value>${memcached.server1.weight}</value>
       </list>
   </constructor-arg>
   <!-- BinaryCommandFactory -->
   <property name="commandFactory">
       <bean class="net.rubyeye.xmemcached.command.BinaryCommandFactory" />
   </property>
   <property name="transcoder">
       <bean class="net.rubyeye.xmemcached.transcoders.SerializingTranscoder" />
   </property>
   <property name="bufferAllocator">
       <bean class="net.rubyeye.xmemcached.buffer.SimpleBufferAllocator"/>
   </property>
</bean>
<!-- Use factory bean to build memcached client -->
<bean id="memcachedClient" factory-bean="memcachedClientBuilder"
     factory-method="build" destroy-method="shutdown" />

代码实现这块儿:

因为注入到了spring里面,所以直接使用@Autowired注入

获取到的MemcachedClient客户端类就可以直接调用memcached的所有方法.

因为我这里是对应的首页,所有只有添加和获取,还没有牵涉到更新缓存的问题,更新缓存我会放到任务二的app中去做.

package com.service;

import com.bean.Jobs;
import com.dao.JobsDao;
import net.rubyeye.xmemcached.MemcachedClient;
import net.rubyeye.xmemcached.exception.MemcachedException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.concurrent.TimeoutException;

/**
* @author Arike
* Create_at 2018/1/2 16:12
*/
@Service
public class JobsServiceImpl implements IJobsService {
@Autowired
   JobsDao jobsDao;
   @Autowired
   MemcachedClient memcachedClient;
   
   @Override
   public List<Jobs> selectJobs() {
try {
if (null == memcachedClient.get("selectJobs")) {
memcachedClient.add("selectJobs", 60 * 60, jobsDao.selectJobs());
               return memcachedClient.get("selectJobs");
           }
} catch (TimeoutException e) {
e.printStackTrace();
       } catch (InterruptedException e) {
e.printStackTrace();
       } catch (MemcachedException e) {
e.printStackTrace();
       }
try {
return memcachedClient.get("selectJobs");
       } catch (TimeoutException e) {
e.printStackTrace();
       } catch (InterruptedException e) {
e.printStackTrace();
       } catch (MemcachedException e) {
e.printStackTrace();
       }
return jobsDao.selectJobs();
   }
}

明天计划的事情:(一定要写非常细致的内容) 

用memcache把任务2和5的代码都优化加上缓存,并且把代码整合到一个项目中.


遇到的问题:(遇到什么困难,怎么解决的) 

memcache一开始看官网给的资料,很生硬,讲的比较底层,看的我头皮发麻,后来还是直接去找了怎么用的文章,

直接通过先用,后理解.
收获:(通过今天的学习,学到了什么知识)

学会了一个缓存工具.


返回列表 返回列表
评论

    分享到