准备搭建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.gz
2|进入文件
cd libevent-1.4.14b-stable
3.编译安装(默认安装到/usr/local/lib/目录)
./configure make make install
(二)安装memcached
安装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 install
这里可能会在安装的时候提示权限问题,那么就先
chmod +x configure
安装完成后,会在 /local/memcached 出现 bin和share目录
进行 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 11211
memcache启动参数说明:
安装好了就可以使用memcached了,下面我用一种最简单的官方提供的方法java_memcached_releas
可以到这里去下载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