日期:2014-05-16  浏览次数:20818 次

linux服务器缓存环境memcached搭建及应用(java)

1.下载memcached服务器端安装文件http://www.danga.com/memcached/download.bml

2.下载libevent-1.4.12-stable.tar.gz,memcached需要用到socked,依赖此安装文件,下载地址:http://www.monkey.org/~provos/libevent/

3.由于linux系统可能默认已经安装libevent,

执行命令:rpm -qa|grep libevent查看系统是否带有该安装软件

如果有执行命令:rpm -e libevent-1.1a-3.2.1 --nodeps(由于系统自带的版本旧,忽略依赖删除)

4.安装libevent,

tar zxvf libevent-1.4.12-stable.tar.gz

cd libevent-1.4.12-stable

./configure --prefix=/usr/local/libevent-1.4

make

make install

5.安装memcached

tar zxvf memcached-1.4.0.tar.gz

cd memcached-1.4.0

./configure --prefix=/usr/local/memcached-1.4 --with-libevent=/usr/local/libevent-1.4.2/

make

make install

至此memcached安装完毕

6.启动memcached命令:

./memcached -d -m 1024 -l 192.168.1.129 -p 11211

# /usr/local/bin/memcached -d -m 200 -u root -l 192.168.1.91 -p 12301 -c 1000 -P /tmp/memcached.pid
相关解释如下:
-d选项是启动一个守护进程,
-m是分配给Memcache使用的内存数量,单位是MB,这里是200MB
-u是运行Memcache的用户,如果当前为 root 的话,需要使用此参数指定用户。
-l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.1.91
-p是设置Memcache监听的端口,我这里设置了12301,最好是1024以上的端口
-c选项是最大运行的并发连接数,默认是1024,这里设置了256
-P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid
停止Memcache进程:
# kill `cat /tmp/memcached.pid`
也可以启动多个守护进程,但是端口不能重复

注:如果在启动过程中出现如下错误:

error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory

由于libevent安装的时候指定了目录,可能导致memcached找不到该文件,可以执行如下命令修改此错误

查找错误:LD_DEBUG=libs /usr/local/memcached-1.4/bin/memcached -v

会发现memcached查找依赖libevent是在/usr/lib/查找libevent-1.4.so.2

然后执行命令

ln -s /usr/local/libevent-1.4.2/lib/libevent-1.4.so.2 /usr/lib/libevent-1.4.so.2

问题即可解决

memcached的java客户端jar包下载地址:http://www.whalin.com/memcached/#download

?

?

简单应用:

SockIOPool pool = SockIOPool.getInstance();
???? ?pool.setServers(servers);
????? pool.setWeights(weighs);
????? pool.setInitConn(initConn);
????? pool.setMaxConn(maxConn);
????? pool.setMinConn(minConn);
???? ?pool.setMaxIdle(maxIdle);
????? pool.setMaintSleep(maintSleep);
????? pool.setSocketTO(socketTO);
????? pool.setNagle(false);
????? pool.initialize();
??
????? MemCachedClient mcc = new MemCachedClient();

?

?public boolean set(String key, Object value, Date expire){
??if(expire != null)
???return mcc.set(key, value, expire);
??else
???return mcc.set(key, value);
?}
?
?/**
? * 获取记录
? *
? * @param key?键值
? * @return??之前存储的数据
? */
?public Object get(String key){
??return mcc.get(key);
?}

?

?

?