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);
}