项目开发中需要用到memcached缓存记录下来相关操作方便日后复习,如果有错误或遗漏请留言。
memcached服务端安装
下载安装包
下载地址
32位系统 1.4.4版本:http://static.runoob.com/download/memcached-win32-1.4.4-14.zip
64位系统 1.4.4版本:http://static.runoob.com/download/memcached-win64-1.4.4-14.zip
安装
1.解压下载的服务端安装包到指定目录c:/memcached下
2.打开cmd黑窗口 进入解压目录下
3.安装
memcached.exe -d install
4.启动
memcached.exe -d start
5.卸载 需要时执行
memcached.exe -d stop
memcached.exe -d uninstall
注意:必须先停止memecached后才能卸载。
连接
1.语法
telnet host port
host memcached服务端IP地址
port memcached服务端接口
例如:
telnet 127.0.0.1 11211
操作数据
具体参考:http://www.runoob.com/memcached/memcached-set-data.html
java客户端实例
1.解压java客户端将所有jar包放到项目中
2.编写工具类
package com.demo.util;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Date;
import java.util.Properties;
import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
/**
* memcached缓存基本操作 2017-6-1 lg
*
*/
public class Memcached {
private static Memcached instance = new Memcached();
/**
* memcached客户端
*/
private static MemCachedClient mcc;
private int serverAmount = 0;//memcached服务器数量
private String url = "/memcached.properties";//配置文件地址 根据实际情况调整
/**
* 私有构造方法
*/
private Memcached(){
try {
Properties pro = new Properties();
pro.load(Memcached.class.getResource(url).openStream());
String[] servers = pro.getProperty("servers").split(",");//memcached服务器连接地址和端口号
serverAmount = servers.length;//服务器数量
SockIOPool pool = SockIOPool.getInstance();
pool.setServers(servers);
pool.setFailover(Boolean.valueOf(pro.get("failover").toString()));//当memcached服务器失效的时候是否连接下一个memcached服务器
pool.setInitConn(Integer.valueOf(pro.get("initConn").toString()));//初始化连接服务器连接数量
pool.setMinConn(Integer.valueOf(pro.get("minConn").toString()));//服务器最小连接数量
pool.setMaxConn(Integer.valueOf(pro.get("maxConn").toString()));//服务器最大连接数量
pool.setMaxIdle(Long.valueOf(pro.get("maxIdle").toString()));//连接最长空闲时间 毫秒
pool.setMaintSleep(Long.valueOf(pro.get("maintSleep").toString()));//自查线程周期进行工作,其每次休眠时间
pool.setNagle(Boolean.valueOf(pro.get("nagle").toString()));
pool.setSocketTO(Integer.valueOf(pro.get("socketTO").toString()));
pool.setAliveCheck(Boolean.valueOf(pro.get("aliveCheck").toString()));//是否检查memcached服务器是否失效
pool.initialize();
//memcached客户端
mcc = new MemCachedClient();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取唯一实例
* @return
*/
public static Memcached getInstance(){
return instance;
}
/**
* 新增
* @param key 键
* @param value 值
* @return
*/
public boolean add(String key,Object value){
if (serverAmount == 1) {//只拥有一个memcached服务器
return mcc.set(key, value);//直接保存数据
} else {
int num = serverNumber(key);//数据应保存的服务器标记
return mcc.set(key, value, num);
}
}
/**
* 新增
* @param key 键
* @param value 值
* @param millisecond 数据过期时间 单位毫秒
* @return
*/
public boolean add(String key,Object value,int millisecond){
if (serverAmount == 1) {//只拥有一个memcached服务器
return mcc.set(key, value, new Date(millisecond));//直接保存数据
} else {
int num = serverNumber(key);//数据应保存的服务器标记
return mcc.set(key, value, new Date(millisecond), num);
}
}
/**
* 删除
* @param key 键
* @return
*/
public boolean delete(String key){
if (serverAmount == 1) {//只拥有一个memcached服务器
return mcc.delete(key);
} else {
int num = serverNumber(key);//数据应保存的服务器标记
return mcc.delete(key, num, null);
}
}
/**
* 修改
* @param key 键
* @param value 值
* @return
*/
public boolean update(String key,Object value){
if (serverAmount == 1) {//只拥有一个memcached服务器
return mcc.replace(key, value);
} else {
int num = serverNumber(key);//数据应保存的服务器标记
return mcc.replace(key, value, num);
}
}
/**
* 修改
* @param key 键
* @param value 值
* @param millisecond 数据过期时间 单位毫秒
* @return
*/
public boolean update(String key,Object value,int millisecond){
if (serverAmount == 1) {//只拥有一个memcached服务器
return mcc.replace(key, value, new Date(millisecond));
} else {
int num = serverNumber(key);//数据应保存的服务器标记
return mcc.replace(key, value, new Date(millisecond), num);
}
}
/**
* 查询
* @param key
* @return
*/
public Object query(String key){
if (serverAmount == 1) {//只拥有一个memcached服务器
return mcc.get(key, 0);//直接查询数据
} else {
int num = serverNumber(key);//数据应保存的服务器标记
return mcc.get(key, num);
}
}
/**
* 计算数据应该保存到哪个memcached服务器 返回服务器标记
* @param key 键
* @return
*/
public int serverNumber(String key){
int tem01 = key.hashCode();//主键字节码
int tem02 = tem01 % serverAmount;//所属服务器标记 = 键字节码 % 服务器数量
return tem02;
}
}
3.编写配置文件
#mecached配置信息
#memcached服务器连接地址和端口号 多个已逗号间隔
servers=192.168.1.111:11211,192.168.1.109:11211
#当memcached服务器失效的时候是否连接下一个memcached服务器
failover=true
#初始化连接服务器连接数量
initConn=10
#服务器最小连接数量
minConn=5
#服务器最大连接数量
maxConn=250
#连接最长空闲时间 毫秒
maxIdle=3600000
#自查线程周期进行工作,其每次休眠时间
maintSleep=30
#
nagle=false
#
socketTO=3000
#是否检查memcached服务器是否失效
aliveCheck=true