发表于: 2018-03-05 11:59:36

3 786


今天终于回来了(差不多10多天没有coding)感觉有点生疏了

今天继续完成Memcache(缓存)的使用

http://www.cnblogs.com/mycifeng/p/5882509.html(参考文档)

开始测试连接(memcached的文件夹下面)

telnet 127.0.0.1 11211 (本地的连接)

连接成功

                                             

telnet 47.94.**.** 11211 (服务器连接)

连接成功

开始链接阿里云的时候连接不上

是端口没有开启(要在安全组里面开启端口 11211 )

接下来就是怎么让java怎么连接memcached的服务

http://www.runoob.com/memcached/java-memcached.html(参考文档)

添加mavenjar

http://mvnrepository.com/artifact/com.whalin/Memcached-Java-Client/3.0.2(jar包位置)

 

http://blog.csdn.net/qiyongkang520/article/details/57083642(参考文档)

添加maven jar

配置memcached.properties

#######################Memcached配置#######################

#服务器地址

memcached.server=47.94.14.145

memcached.port=11211

#初始化时对每个服务器建立的连接数目

memcached.initConn=20

#每个服务器建立最小的连接数

memcached.minConn=10

#每个服务器建立最大的连接数

memcached.maxConn=50

#自查线程周期进行工作,其每次休眠时间

memcached.maintSleep=3000

#Socket的参数,如果是true在写数据时不缓冲,立即发送出去

memcached.nagle=false

#Socket阻塞读取数据的超时时间

memcached.socketTO=3000

配置memcachedContext.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:p="http://www.springframework.org/schema/p"

xsi:schemaLocation="

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx-3.0.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop-3.0.xsd

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<!-- properties config -->

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

<property name="order" value="1"/>

<property name="ignoreUnresolvablePlaceholders" value="true"/>

<property name="locations">

<list>

<value>classpath:memcached.properties</value>

</list>

</property>

</bean>

 

<!-- Memcached配置 -->

<bean id="memcachedPool" class="com.whalin.MemCached.SockIOPool"

factory-method="getInstance" init-method="initialize" destroy-method="shutDown">

<property name="servers">

<list>

<value>${memcached.server}:${memcached.port}</value>

</list>

</property>

<property name="initConn">

<value>${memcached.initConn}</value>

</property>

<property name="minConn">

<value>${memcached.minConn}</value>

</property>

<property name="maxConn">

<value>${memcached.maxConn}</value>

</property>

<property name="maintSleep">

<value>${memcached.maintSleep}</value>

</property>

<property name="nagle">

<value>${memcached.nagle}</value>

</property>

<property name="socketTO">

<value>${memcached.socketTO}</value>

</property>

</bean>

</beans>

 

具体的类的实现

package com.fuwei.util;

 

import java.io.PrintWriter;

import java.io.StringWriter;

import java.util.Date;

import com.whalin.MemCached.MemCachedClient;

import org.apache.log4j.LogManager;

import org.apache.log4j.Logger;

 

public class MemcacheUtil {

private static Logger logger = LogManager.getLogger(MemcacheUtil.class);

private static String MEMCACHE_POOL_NAME = "default";

 

/**

* cachedClient.

*/

private static MemCachedClient cachedClient;

static {

if (cachedClient == null) {

cachedClient = new MemCachedClient(MEMCACHE_POOL_NAME);

}

}

 

/**

* 构造函数.

*/

private MemcacheUtil() {

}

 

/**

* 向缓存添加新的键值对。如果键已经存在,则之前的值将被替换.

*/

public static boolean set(String key, Object value) {

return setExp(key, value, null);

}

 

/**

* 向缓存添加新的键值对。如果键已经存在,则之前的值将被替换.

* 过期时间 New Date(1000*10):十秒后过期

* @return boolean

*/

public static boolean set(String key, Object value, Date expire) {

return setExp(key, value, expire);

}

 

/**

* 向缓存添加新的键值对。如果键已经存在,则之前的值将被替换.

* 过期时间 New Date(1000*10):十秒后过期

* @return boolean

*/

private static boolean setExp(String key, Object value, Date expire) {

boolean flag = false;

try {

flag = cachedClient.set(key, value, expire);

} catch (Exception e) {

logger.error("Memcached set方法报错,key值:" + key + "\r\n" + exceptionWrite(e));

}

return flag;

}

 

/**

* 仅当缓存中不存在键时,add 命令才会向缓存中添加一个键值对.

*/

public static boolean add(String key, Object value) {

return addExp(key, value, null);

}

 

/**

* 仅当缓存中不存在键时,add 命令才会向缓存中添加一

* 过期时间 New Date(1000*10):十秒后过期

* @return boolean

*/

public static boolean add(String key, Object value, Date expire) {

return addExp(key, value, expire);

}

 

/**

* 仅当缓存中不存在键时,add 命令才会向缓存中添加一个键值对.

* 过期时间 New Date(1000*10):十秒后过期

* @return boolean

*/

private static boolean addExp(String key, Object value, Date expire) {

boolean flag = false;

try {

flag = cachedClient.add(key, value, expire);

} catch (Exception e) {

logger.error("Memcached add方法报错,key值:" + key + "\r\n" + exceptionWrite(e));

}

return flag;

}

 

/**

* 仅当键已经存在时,replace 命令才会替换缓存中的键.

*/

public static boolean replace(String key, Object value) {

return replaceExp(key, value, null);

}

 

/**

* 仅当键已经存在时,replace 命令才会替换缓存中的键.

* 过期时间 New Date(1000*10):十秒后过期

* @return boolean

*/

public static boolean replace(String key, Object value, Date expire) {

return replaceExp(key, value, expire);

}

 

/**

* 仅当键已经存在时,replace 命令才会替换缓存中的键.

* 过期时间 New Date(1000*10):十秒后过期

* @return boolean

*/

private static boolean replaceExp(String key, Object value, Date expire) {

boolean flag = false;

try {

flag = cachedClient.replace(key, value, expire);

} catch (Exception e) {

logger.error("Memcached replace方法报错,key值:" + key + "\r\n" + exceptionWrite(e));

}

return flag;

}

 

/**

* get 命令用于检索与之前添加的键值对相关的值.

*/

public static Object get(String key) {

Object obj = null;

try {

obj = cachedClient.get(key);

} catch (Exception e) {

logger.error("Memcached get方法报错,key值:" + key + "\r\n" + exceptionWrite(e));

}

}

 

/**

* 删除 memcached 中的任何现有值.

*/

public static boolean delete(String key) {

return cachedClient.delete(key);

}

 

/**清理缓存中的所有键/值对.

*/

public static boolean flashAll() {

boolean flag = false;

try {

flag = cachedClient.flushAll();

} catch (Exception e) {

logger.error("Memcached flashAll方法报错\r\n" + exceptionWrite(e));

}

return flag;

}

 

/**

* 返回异常栈信息,String类型.

*/

private static String exceptionWrite(Exception e) {

StringWriter sw = new StringWriter();

PrintWriter pw = new PrintWriter(sw);

e.printStackTrace(pw);

pw.flush();

return sw.toString();

}

}

 

测试的类

package com.fuwei.util;

import org.springframework.context.support.ClassPathXmlApplicationContext;

 

public class MemcacheClientTest {

public static void main(String[] args) {

new ClassPathXmlApplicationContext("applicationContext.xml");

 

//设置key

boolean isSuccess = MemcacheUtil.set("name", "qiyongkang");

System.out.println("是否成功:" + isSuccess);

Object obj = MemcacheUtil.get("name");

System.out.println("获取name:" + obj);

}

}

 

测试运行

出现错误,感觉流程是对的

 

今天完成的事情:就是实现javamemcached的实现,查了很多的博客,感觉这个流程还是比较完整,但是感觉还是有点问题,就是感觉主函数的测试加载不了,可能是配置还是哪里的问题,还是需要多看一下,还是对这个memcached的了解不够.

 

今天遇到的困难:可能是对这个memcached 的理解还不是很熟悉,接下来的任务就是继续解决这个问题

 

明天的计划:继续完成这个错误和熟悉memcached,最近开学还有很多的事情我类处理,收假期的报告,还有书本的事情,同学们的基本情况,跑办公室(还是每天坚持)

 

坚持

 



返回列表 返回列表
评论

    分享到