Memcached的配置,SSH项目中的整合(com.whalin),Memcached工具类,Memcached的代码调用




1 改动pom.xml,加入依赖文件:

<dependency>

<groupId>com.whalin</groupId>

<artifactId>Memcached-Java-Client</artifactId>

<version>3.0.2</version>

</dependency>

2 加入memcached-context.xml,注意要在web.xml中进行配置

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

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

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

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

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

xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd

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

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

http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd

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

<!—注意以下的:memcache在使用的时候会用到-->

<beans:bean id="memcache" class="com.whalin.MemCached.SockIOPool"

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

<beans:constructor-arg>

<beans:value>memcache</beans:value>

</beans:constructor-arg>

<beans:property name="servers">

<beans:list>

<!--server地址-->

<beans:value>172.16.24.27:11211</beans:value>

</beans:list>

</beans:property>

<!--初始化时对每一个server建立的连接数目-->

<beans:property name="initConn">

<beans:value>20</beans:value>

</beans:property>

<!--每一个server建立最小的连接数-->

<beans:property name="minConn">

<beans:value>10</beans:value>

</beans:property>

<!--每一个server建立最大的连接数-->

<beans:property name="maxConn">

<beans:value>50</beans:value>

</beans:property>

<!--自查线程周期进行工作,其每次休眠时间-->

<beans:property name="maintSleep">

<beans:value>1000</beans:value>

</beans:property>

<!--Socket的參数,假设是true在写数据时不缓冲。马上发送出去-->

<beans:property name="nagle">

<beans:value>false</beans:value>

</beans:property>

<!--Socket堵塞读取数据的超时时间-->

<beans:property name="socketTO">

<beans:value>1000</beans:value>

</beans:property>


<!-- memcached的连接路径出现故障的时候,代码连接的时候时间超时设置 -->


<beans:property name="socketConnectTO">


<beans:value>500</beans:value>


</beans:property>



</beans:bean>

</beans:beans>

3 web.xml中配置:

4 编写MemcachedUtils,代码例如以下:

package com.kuman.cartoon.utils;

import java.util.Date;

import org.apache.log4j.Logger;

import com.whalin.MemCached.MemCachedClient;

/**

* @ClassName: MemcachedUtils

* @Description: Memcached工具类

* @author

* @date 2015-8-6

*

*/

public class MemcachedUtils {

private static final Logger logger = Logger.getLogger(MemcachedUtils.class);

private static MemCachedClient cachedClient;

static {

if (cachedClient == null)

//括号里的名称要和配置文件memcached-context.xml中的名称一致

cachedClient = new MemCachedClient("memcache");

}

private MemcachedUtils() {}

/**

* 向缓存加入新的键值对。假设键已经存在,则之前的值将被替换。

*

* @param key

*

* @param value

*

* @return

*/

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

return setExp(key, value, null);

}

/**

* 向缓存加入新的键值对。假设键已经存在。则之前的值将被替换。

*

* @param key

*

* @param value

*

* @param expire

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

* @return

*/

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

return setExp(key, value, expire);

}

/**

* 向缓存加入新的键值对。假设键已经存在。则之前的值将被替换。

*

* @param key

*

* @param value

*

* @param expire

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

* @return

*/

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

boolean flag = false;

try {

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

} catch (Exception e) {

// 记录Memcached日志

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

}

return flag;

}

/**

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

*

* @param key

*

* @param value

*

* @return

*/

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

return addExp(key, value, null);

}

/**

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

*

* @param key

*

* @param value

*

* @param expire

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

* @return

*/

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

return addExp(key, value, expire);

}

/**

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

*

* @param key

*

* @param value

*

* @param expire

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

* @return

*/

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

boolean flag = false;

try {

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

} catch (Exception e) {

// 记录Memcached日志

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

}

return flag;

}

/**

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

*

* @param key

*

* @param value

*

* @return

*/

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

return replaceExp(key, value, null);

}

/**

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

*

* @param key

*

* @param value

*

* @param expire

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

* @return

*/

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

return replaceExp(key, value, expire);

}

/**

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

*

* @param key

*

* @param value

*

* @param expire

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

* @return

*/

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");

}

return flag;

}

/**

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

*

* @param key

*

* @return

*/

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");

}

return obj;

}

/**

* 删除 memcached 中的不论什么现有值。

*

* @param key

*

* @return

*/

public static boolean delete(String key) {

return deleteExp(key, null);

}

/**

* 删除 memcached 中的不论什么现有值。

*

* @param key

*

* @param expire

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

* @return

*/

public static boolean delete(String key, Date expire) {

return deleteExp(key, expire);

}

/**

* 删除 memcached 中的不论什么现有值。

*

* @param key

*

* @param expire

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

* @return

*/

private static boolean deleteExp(String key, Date expire) {

boolean flag = false;

try {

flag = cachedClient.delete(key, expire);

} catch (Exception e) {

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

}

return flag;

}

/**

* 清理缓存中的全部键/值对

*

* @return

*/

public static boolean flashAll() {

boolean flag = false;

try {

flag = cachedClient.flushAll();

} catch (Exception e) {

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

}

return flag;

}

/*@Test

public void testMemcachedSpring() {

MemcachedUtils.set("aa", "bb", new Date(1000 * 60));

Object obj = MemcachedUtils.get("aa");

System.out.println("***************************");

System.out.println(obj.toString());

}*/

}

5 SpringMVC中调用的方式:

@RequestMapping(value = "/toIndex")

public String toIndex(Model model) {

//方法一,这样的不建议使用

//MemCachedClient memCachedClient = new MemCachedClient("memcache");

//memCachedClient.set("name", "simple");

//System.out.println(memCachedClient.get("name"));

//方法二,建议这样的

MemcachedUtils.set("name", "simple");

String name = (String)MemcachedUtils.get("name");

System.out.println(name);

return "/admin/index";

}



长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn