首页 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
资讯 业界资讯 软件杂谈 编程开发 网站建设 网络观查 搜索引擎 移动应用 网站运营 网络地图
开发 移动开发 Web前端 架构设计 编程语言 互联网 数据库 系统运维 云计算 开发杂谈
[架构设计] centos安装memcached和java操作实例
centos安装memcached和java操作实例

准备搭建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);
        
        // 设置初始连接数、最小和最大连接数以及最大chǔ理时间
        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


 此文从网络中自动搜索生成,不代表本网站赞成被搜索网站的内容或立场    查看原文
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 新闻资讯 小游戏 Chinese Culture 股票 三丰软件 开发 中国文化 网文精选 阅读网 看图 日历 万年历 2018年12日历
2018-12-13 8:34:14
 
  网站联系 软件世界网-www.sjsjw.com ©2014 蜀ICP备06016416号 三峰网旗下网站