发表于: 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一开始看官网给的资料,很生硬,讲的比较底层,看的我头皮发麻,后来还是直接去找了怎么用的文章,
直接通过先用,后理解.
收获:(通过今天的学习,学到了什么知识)
学会了一个缓存工具.
评论