Memcache的使用配置

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

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

cnblogs.com/mycifeng/p/(参考文档)

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

telnet 127.0.0.1 11211 (本地的连接)

连接成功

v2-77c874fe3ab811458ce0f511fd2b9028_b.jpg


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

连接成功


v2-21b2a20ac860a78a6a7eddc39ba1a82a_b.jpg


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

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


v2-de0323976efbaa75bcc8bcee8b4d4a9a_b.jpg


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

runoob.com/memcached/ja(参考文档)

添加maven的jar包

mvnrepository.com/artif(jar包位置)


blog.csdn.net/qiyongkan(参考文档)


v2-20a6da1c4cac4f05a51364e40e148bb6_b.jpg


添加maven jar


v2-403cea91587ec3d8e279c2c5a0e7c2cd_b.jpg


配置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="springframework.org/sch"

xmlns:xsi="w3.org/2001/XMLSchema-i" xmlns:mvc="springframework.org/sch"

xmlns:context="springframework.org/sch"

xmlns:aop="springframework.org/sch" xmlns:tx="springframework.org/sch"

xmlns:p="springframework.org/sch"

xsi:schemaLocation="

springframework.org/sch

springframework.org/sch

springframework.org/sch

springframework.org/sch

springframework.org/sch

springframework.org/sch

springframework.org/sch

springframework.org/sch

springframework.org/sch

springframework.org/sch">

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

}

}


测试运行


v2-91e020c9b3b8b3427df1edd40332a65f_b.jpg


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


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


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


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


坚持

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值