标签:centos memcached 集群 cache 缓存服务器
准备搭建memcached缓存集群。这里简单的记录一下搭建过程
由于memcached安装时,需要使用libevent类库,所以先安装libevent 下载地址http://www.monkey.org/~provos/libevent/
(一)我下载的是libevent-1.4.14b-stable.tar.gz
1|解压 tar zxvf libevent-1.4.14b-stable.tar.gz2|进入文件
cd libevent-1.4.14b-stable3.编译安装(默认安装到/usr/local/lib/目录)
./configure make make install
安装memcached
memcached下载网址:http://www.danga.com/memcached/download.bml
1. 解压缩
tar xzfv memcached-1.2.6.tar.gz
2. 进入到 memcached-1.2.6目录
cd memcached-1.2.6
3. 编译,安装
./configure --prefix=/local/memcached
make
make installchmod +x configure
进行 bin目录,启动 memcache
方法如下:
./memcached -d -u nobody -m 512 127.0.0.1 -p 11211
此时,会报一个异常
error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory
原因是找不到libevent-1.4.so.2类库,解决办法如下:
使用LD_DEBUG=help ./memcached -v来确定 加载的类库路径,方法如下:
LD_DEBUG=libs ./memcached -v 2>&1 > /dev/null | less
则系统会显示:
linux:/local/memcached/bin # LD_DEBUG=libs ./memcached -v 2>&1 > /dev/null | less
20421: find library=libevent-1.4.so.2; searching
20421: search cache=/etc/ld.so.cache
20421: search path=/lib/tls/i686/sse2:/lib/tls/i686:/lib/tls/sse2:/lib/tls:/lib/i686/sse2:/lib/i686:/lib/sse2:/lib:/usr/lib/tls/i686
/sse2:/usr/lib/tls/i686:/usr/lib/tls/sse2:/usr/lib/tls:/usr/lib/i686/sse2:/usr/lib/i686:/usr/lib/sse2:/usr/lib (system search path)
20421: trying file=/lib/tls/i686/sse2/libevent-1.4.so.2
20421: trying file=/lib/tls/i686/libevent-1.4.so.2
20421: trying file=/lib/tls/sse2/libevent-1.4.so.2
20421: trying file=/lib/tls/libevent-1.4.so.2
20421: trying file=/lib/i686/sse2/libevent-1.4.so.2
20421: trying file=/lib/i686/libevent-1.4.so.2
20421: trying file=/lib/sse2/libevent-1.4.so.2
20421: trying file=/lib/libevent-1.4.so.2
20421: trying file=/usr/lib/tls/i686/sse2/libevent-1.4.so.2
20421: trying file=/usr/lib/tls/i686/libevent-1.4.so.2
20421: trying file=/usr/lib/tls/sse2/libevent-1.4.so.2
20421: trying file=/usr/lib/tls/libevent-1.4.so.2
20421: trying file=/usr/lib/i686/sse2/libevent-1.4.so.2
20421: trying file=/usr/lib/i686/libevent-1.4.so.2
20421: trying file=/usr/lib/sse2/libevent-1.4.so.2
20421: trying file=/usr/lib/libevent-1.4.so.2
20421:
./memcached: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory我们看到,memcached会到很多地方去找,所以根据其它求,我们只需建一个软链接,指定到我们安装的类库上即可 方法如下: ln -s /usr/local/lib/libevent-1.4.so.2 /lib/libevent-1.4.so.2 现在可以正常启动memcached了 ./memcached -d -u nobody -m 512 127.0.0.1 -p 11211memcache启动参数说明:
可以到这里去下载https://github.com/gwhalin/Memcached-Java-Client/downloads
工具类
package org.memcached.xiezhaodong.test;
import java.util.Date;
import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
/**
*
* <pre><b>功能描述:</b>Memcached的 工具类
*
* @author xie)<br>
*
* <b>修改历史:</b>(修改人,修改时间,修改原因/内容)
*
* </pre>
*/
public final class MemcachedUtil {
/**
* <b>构造函数:工具类,禁止实例化</b>
*
*/
private MemcachedUtil() {
}
// 创建全局的唯一实例
private static MemCachedClient mcc = new MemCachedClient();
/**
* 自身实例
*/
private static MemcachedUtil memcachedUtil = new MemcachedUtil();
// 设置与缓存服务器的连接池
static {
// 服务器列表和其权重
String[] servers = {"192.168.80.100:11211" };// Ip地址和端口号
// 权重
Integer[] weights = {3 };
// 获取socket连接池的实例对象
SockIOPool pool = SockIOPool.getInstance();
// 设置服务器信息
pool.setServers(servers);
pool.setWeights(weights);
// 设置初始连接数、最小和最大连接数以及最大处理时间
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.initialize();
// 压缩设置,超过指定大小(单位为K)的数据都会被压缩
// mcc.setCompressEnable(true);
// mcc.setCompressThreshold(64 * 1024);
mcc.setPrimitiveAsString(true);// 设置序列化
}
/**
*
* <pre><b>功能描述:</b>获取唯一实例.
*
* @author :xiezhaodong
* <b>创建日期 :</b>2012-4-25 上午10:57:41
*
* @return
*
* <b>修改历史:</b>(修改人,修改时间,修改原因/内容)
*
* </pre>
*/
public static MemcachedUtil getInstance() {
return memcachedUtil;
}
/**
*
* <pre><b>功能描述:</b>新增一个缓存数据
*
* @author :xiezhaodong
* <b>创建日期 :</b>2012-4-25 上午10:55:15
*
* @param key 缓存的key
* @param value 缓存的值
* @return 操作结果
*
* <b>修改历史:</b>(修改人,修改时间,修改原因/内容)
*
* </pre>
*/
public boolean add(String key, Object value) {
// 不会存入缓存
return mcc.add(key, value);
// return mcc.set(key, value);
}
/**
*
* <pre><b>功能描述:</b>新增一个缓存数据
*
* @author :xiezhaodong
* <b>创建日期 :</b>2012-4-25 上午10:56:15
*
* @param key 缓存的key
* @param value 缓存的值
* @param expiry 缓存过期的时间
* @return 操作结果
*
* <b>修改历史:</b>(修改人,修改时间,修改原因/内容)
*
* </pre>
*/
public boolean add(String key, Object value, Date expiry) {
// 不会存入缓存
return mcc.add(key, value, expiry);
// return mcc.set(key, value, expiry);
}
/**
* <pre><b>功能描述:</b>替换已有的缓存数据
*
* @author :xiezhaodong
* <b>创建日期 :</b>2012-4-25 上午10:55:34
*
* @param key 设置对象的key
* @return Object 设置对象的值
* @return 是否替换成功
*
* <b>修改历史:</b>(修改人,修改时间,修改原因/内容)
*
* </pre>
*/
public boolean replace(String key, Object value) {
return mcc.replace(key, value);
}
/**
*
* <pre><b>功能描述:</b>替换已有的缓存数据
*
* @author :xiezhaodong
* <b>创建日期 :</b>2012-4-25 上午10:43:17
*
* @param key 设置对象的key
* @return Object 设置对象的值
* @param expiry 过期时间
* @return 是否替换成功
*
* <b>修改历史:</b>(修改人,修改时间,修改原因/内容)
*
* </pre>
*/
public boolean replace(String key, Object value, Date expiry) {
return mcc.replace(key, value, expiry);
}
/**
*
* <pre><b>功能描述:</b>根据指定的关键字获取对象
*
* @author :xiezhaodong
* <b>创建日期 :</b>2012-4-25 上午10:42:49
*
* @param key 获取对象的key
* @return Object 对象值
*
* <b>修改历史:</b>(修改人,修改时间,修改原因/内容)
*
* </pre>
*/
public Object get(String key) {
return mcc.get(key);
}
}对象,必须实现序列化接口
package org.memcached.xiezhaodong.test;
import java.io.Serializable;
/**
*
* <pre><b>功能描述:</b>员工类,必须要序列化,否则缓存操作时会报错的
*
* @author :xiezhaodong<br>
*
* <b>修改历史:</b>(修改人,修改时间,修改原因/内容)
*
* </pre>
*/
public class Employee implements Serializable {
/**
* serialVersionUID
*/
private static final long serialVersionUID = -6487397580836471048L;
/**
* 员工名字
*/
private String EmpName;
/**
* 部门名
*/
private String deptName;
/**
* 公司名
*/
private String companyName;
/**
*
* <b>构造函数:</b>
*
*/
public Employee() {
}
/**
* Access method for the empName property
*
* @return the empName
*/
public String getEmpName() {
return EmpName;
}
/**
* Sets the value of empName the property
*
* @param empName the empName to set
*/
public void setEmpName(String empName) {
EmpName = empName;
}
/**
* Access method for the deptName property
*
* @return the deptName
*/
public String getDeptName() {
return deptName;
}
/**
* Sets the value of deptName the property
*
* @param deptName the deptName to set
*/
public void setDeptName(String deptName) {
this.deptName = deptName;
}
/**
* Access method for the companyName property
*
* @return the companyName
*/
public String getCompanyName() {
return companyName;
}
/**
* Sets the value of companyName the property
*
* @param companyName the companyName to set
*/
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
}测试类
package org.memcached.xiezhaodong.test;
import com.danga.MemCached.MemCachedClient;
public class MemcachedUtilTest {
public static void main(String[] args) {
// add();
print();
}
private static void print() {
MemcachedUtil cache = MemcachedUtil.getInstance();
Employee emp=(Employee) cache.get("emp");
System.out.println("name:"+emp.getCompanyName());
System.out.println("dep:"+emp.getDeptName());
System.out.println("emp"+emp.getEmpName());
}
private static void add() {
MemcachedUtil cache = MemcachedUtil.getInstance();
Employee emp = new Employee();
emp.setCompanyName("Kevin's Company");
emp.setDeptName("R&D Dept");
emp.setEmpName("Kevin");
cache.add("emp", emp);
}
}
一个简单的单机环境就已经搭建好了。其他的还有一些插件,比如说spring集成的memcached插件等等,以后可以去用一下!
转载请注明http://blog.csdn.net/a837199685
标签:centos memcached 集群 cache 缓存服务器
原文地址:http://blog.csdn.net/a837199685/article/details/42262973