1.首先安装memcached.exe,
2.然后安装memadmin(php环境)
备注:当你调用的时候必须裕兴memcached.exe,注意linux下和windows下是不一样的
先看一下自己的php是否支持memcache的扩展
extension=php_memcache.dll
下载一下php_memcache.dll,并放到php中的ext中
3.运行memadmin,添加服务器连接(数据库持久化连接的危害造成大量数据的存储,反应会有些慢,连接一段时间需要断开调整。)
红色部分可以查询缓存数据。
java程序调用(需要下载memcachedClient.jar)
import java.util.Date;
import java.util.Map;
import org.apache.log4j.Logger;
import com.alisoft.xplatform.asf.cache.memcached.client.MemCachedClient;
import com.alisoft.xplatform.asf.cache.memcached.client.SockIOPool;
import com.base.mvc.BaseService;
public class MemcachedManager extends BaseService{
protected Logger logger = Logger.getLogger(MemcachedManager.class);
// 创建MemCachedClient全局对象
private static MemCachedClient mcc = new MemCachedClient();
static {
// 创建服务器列表及其权重
String serverUrl=getProStr("memcacheService");
String[] servers = {serverUrl};
Integer[] weights = {3};
// 创建Socket连接池对象
SockIOPool pool = SockIOPool.getInstance();
// 设置服务器信息
pool.setServers(servers);
pool.setWeights(weights);
pool.setFailover(true);
// 设置初始连接数、最小和最大连接数以及最大处理时间
pool.setInitConn(5);
pool.setMinConn(5);
pool.setMaxConn(250);
pool.setMaxIdle(1000*60*60*6);
// 设置主线程睡眠时间
pool.setMaintSleep(30);
// 设置TCP参数、连接超时等
pool.setNagle(false);
pool.setSocketTO(3000);
pool.setSocketConnectTO(0);
pool.setAliveCheck(true);
// 初始化连接池
pool.initialize();
// 压缩设置,超过指定大小(单位为K)的数据都会被压缩
mcc.setCompressEnable(true);
mcc.setCompressThreshold(64 * 1024);
}
/**
* 无参构造
*/
protected MemcachedManager (){
}
// 受保护的对象
protected static MemcachedManager instance = new MemcachedManager();
/**
* 为受保护的对象提供一个公共的访问方法
*/
public static MemcachedManager getInstance () {
return instance;
}
/**
* 添加对象到缓存中,构成方法重载
* @param key
* @param value
* @return
*/
public boolean add(String key,Object value) {
try {
return mcc.add(key, value);
} catch (Exception e) {
logger.info("向memcached添加键为"+key+"的缓存数据异常"+e.getMessage());
e.printStackTrace();
}
return false;
}
public boolean add (String key,Object value,Date expiry) {
try {
return mcc.add(key, value,expiry);
} catch (Exception e) {
logger.info("向memcached添加键为"+key+"的缓存数据异常"+e.getMessage());
e.printStackTrace();
}
return false;
}
public boolean replace (String key,Object value) {
try {
return mcc.replace(key, value);
} catch (Exception e) {
logger.info("替换memcached键为"+key+"的缓存数据异常"+e.getMessage());
e.printStackTrace();
}
return false;
}
public boolean replace (String key,Object value,Date expiry){
try {
return mcc.replace(key, value, expiry);
} catch (Exception e) {
logger.info("替换memcached键为"+key+"的缓存数据异常"+e.getMessage());
e.printStackTrace();
}
return false;
}
public boolean delete(String key){
try {
return mcc.delete(key);
} catch (Exception e) {
logger.info("删除memcached键为"+key+"的缓存数据异常"+e.getMessage());
e.printStackTrace();
}
return false;
}
/**
* 根据指定的关键字获取对象
*/
public Object get(String key) {
Object object=null;
try {
object=mcc.get(key);
} catch (Exception e) {
logger.info("从memcached获取键为"+key+"的缓存数据异常"+e.getMessage());
e.printStackTrace();
}
return object;
}
/**
*
* @Title: getAllItems
* @Description: 获取所有
* @param 设定文件
* @return Map<?,?> 返回类型
* @throws
*/
public Map getAllItems(){
String serverUrl=getProStr("memcacheService");
String[] servers = {serverUrl};
return mcc.stats(servers);
}
/**
*
* @Title: removeAll
* @Description: 移除所有缓存数据
* @param @return 设定文件
* @return boolean 返回类型
* @throws
*/
public boolean removeAll(){
try {
logger.info("从memcached删除所有缓存数据异常");
return mcc.flushAll();
} catch (Exception e) {
logger.info("从memcached删除所有缓存数据异常"+e.getMessage());
e.printStackTrace();
}
return false;
}
}
备注:
在用memache中的add方法的时候,有一点要注意,当缓存中有这个key值的时候不能写入,先清理一下或者调用replace方法