Linux下安装Memcached服务端
目前的最新版本是memcached-1.4.0
官网:http://www.danga.com/memcached
下载:http://www.danga.com/memcached/dist/memcached-1.4.0.tar.gz
另外,Memcache用到了libevent这个库用于Socket的处理,所以还需要安装libevent,libevent的最新版本是libevent-1.3。(如果你的系统已经安装了libevent,可以不用安装)
官网:http://www.monkey.org/~provos/libevent/
下载:https://github.com/downloads/libevent/libevent/libevent-2.0.16-stable.tar.gz
用wget指令直接下载这两个东西.下载回源文件后。
1.先安装libevent,即./configure,然后make,最后make install
2.再安装memcached,即./configure,然后make,最后make install
这样就完成了Linux下Memcache服务器端的安装。详细的方法如下:
1、分别把memcached和libevent下载回来,放到 /app 目录下(如果没有/app放到/tmp也可以):
#cd /app
#wget http://www.danga.com/memcached/dist/memcached-1.4.0.tar.gz
#wget https://github.com/downloads/libevent/libevent/libevent-2.0.16-stable.tar.gz
2、先安装libevent库
先查看Linux系统默认是否已经安装libevent库
#rpm -qa|grep libevent
如果显示libevent-1.1a-3.2.1,说明系统默认libevent默认版本较低,可先行卸载。
#rpm -e libevent-1.1a-3.2.1 --nodeps(忽略依赖,直接删除)
然后再安装新的libevent库
#tar zxvf libevent-2.0.16-stable.tar.gz
#cd libevent-2.0.16-stable
#./configure
#make
#make install
然后vim /etc/ld.so.conf
写入/usr/local/lib保存退出
#ldconfig
测试libevent库是否安装成功:
ls -al /usr/local/lib |grep libevent
显示如下:
lrwxrwxrwx 1 root root 21 Dec 12 20:28 libevent-2.0.so.5 -> libevent-2.0.so.5.1.4
-rwxr-xr-x 1 root root 762242 Dec 12 20:28 libevent-2.0.so.5.1.4
-rw-r--r-- 1 root root 990932 Dec 12 20:28 libevent.a
lrwxrwxrwx 1 root root 26 Dec 12 20:28 libevent_core-2.0.so.5 -> libevent_core-2.0.so.5.1.4
-rwxr-xr-x 1 root root 453822 Dec 12 20:28 libevent_core-2.0.so.5.1.4
-rw-r--r-- 1 root root 607838 Dec 12 20:28 libevent_core.a
-rwxr-xr-x 1 root root 974 Dec 12 20:28 libevent_core.la
lrwxrwxrwx 1 root root 26 Dec 12 20:28 libevent_core.so -> libevent_core-2.0.so.5.1.4
lrwxrwxrwx 1 root root 27 Dec 12 20:28 libevent_extra-2.0.so.5 -> libevent_extra-2.0.so.5.1.4
-rwxr-xr-x 1 root root 322768 Dec 12 20:28 libevent_extra-2.0.so.5.1.4
-rw-r--r-- 1 root root 383166 Dec 12 20:28 libevent_extra.a
-rwxr-xr-x 1 root root 981 Dec 12 20:28 libevent_extra.la
lrwxrwxrwx 1 root root 27 Dec 12 20:28 libevent_extra.so -> libevent_extra-2.0.so.5.1.4
-rwxr-xr-x 1 root root 939 Dec 12 20:28 libevent.la
lrwxrwxrwx 1 root root 29 Dec 12 20:28 libevent_openssl-2.0.so.5 -> libevent_openssl-2.0.so.5.1.4
-rwxr-xr-x 1 root root 70707 Dec 12 20:28 libevent_openssl-2.0.so.5.1.4
-rw-r--r-- 1 root root 78984 Dec 12 20:28 libevent_openssl.a
-rwxr-xr-x 1 root root 1010 Dec 12 20:28 libevent_openssl.la
lrwxrwxrwx 1 root root 29 Dec 12 20:28 libevent_openssl.so -> libevent_openssl-2.0.so.5.1.4
lrwxrwxrwx 1 root root 30 Dec 12 20:28 libevent_pthreads-2.0.so.5 -> libevent_pthreads-2.0.so.5.1.4
-rwxr-xr-x 1 root root 14285 Dec 12 20:28 libevent_pthreads-2.0.so.5.1.4
-rw-r--r-- 1 root root 11814 Dec 12 20:28 libevent_pthreads.a
-rwxr-xr-x 1 root root 1002 Dec 12 20:28 libevent_pthreads.la
lrwxrwxrwx 1 root root 30 Dec 12 20:28 libevent_pthreads.so -> libevent_pthreads-2.0.so.5.1.4
lrwxrwxrwx 1 root root 21 Dec 12 20:28 libevent.so -> libevent-2.0.so.5.1.4
这样就OK了,安装好了libevent,下面安装memcached
3、安装memcached服务端
#tar zxvf memcached-1.4.0.tar.gz
#cd memcached-1.4.0
#./configure
#make
#make install
测试memcached服务端是否安装成功:
ls -al /usr/local/bin/memcached
显示如下:
-rwxr-xr-x 1 root root 222925 Dec 12 20:39 /usr/local/bin/memcached
这样就OK了,memcached服务端就安装成功了
4、启动memcached的服务端
1)、#/usr/local/bin/memcached -d -m 128 -l 192.168.1.123 -p 11211 -u root -c 256(也可以启动多个memcached服务端,但端口不能相同)
2)、# /usr/local/bin/memcached -d -m 4096 -u root -p 11211 -c 1024 -P /tmp/memcached.pid
-d选项是启动一个守护进程,
-m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,
-u是运行Memcache的用户,我这里是root,
-l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.1.123,
-p是设置Memcache监听的端口,我这里设置了11211,最好是1024以上的端口,
-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,
5、如果要查看Memcache是否启动,执行:
#ps -ef|grep memcached
root 17911 1 0 20:54 ? 00:00:00 /usr/local/bin/memcached -d -m 128 -l 192.168.1.110 -p 11211 -u root
root 17973 1 0 21:20 ? 00:00:00 /usr/local/bin/memcached -d -m 128 -l 192.168.1.110 -p 8888 -u root
root 18006 5064 0 21:23 pts/0 00:00:00 grep memcached
#kill -9 17911 17973
6、使用Java程序连接memcached服务端
package com.memcache;
import java.util.Date;
import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
public class MemcachedManager {
//创建MemCachedClient全局对象
private static MemCachedClient memclient = new MemCachedClient(); static {
//创建服务器列表及其权重
String[] servers = {"192.168.1.123:11211"};
Integer[] weights = {3};
//创建Socket连接池对象
SockIOPool pool = SockIOPool.getInstance();
//设置服务器信息
pool.setServers(servers);
pool.setWeights(weights);
pool.setFailover(true);
//设置初始连接数、最小和最大连接数以及最大处理时间
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.setAliveCheck(true);
//初始化连接池
pool.initialize();
//压缩设置,超过指定大小(单位为K)的数据都会被压缩
memclient.setCompressEnable(true);
memclient.setCompressThreshold(64*1024);
}
/**
* 无参构造
*/
protected MemcachedManager() {}
/**
* 受保护的对象
*/
protected static MemcachedManager instance = new MemcachedManager();
/**
* 为受保护的对象提供一个公共的访问方法
*/
public static MemcachedManager getInstance() {
return instance;
}
/**
* 添加对象到缓存中,构成方法重载
*
* @param key
* @param value
* @return
*/
public boolean set(String key, Object value) {
return memclient.set(key, value);
}
public boolean add(String key, Object value) {
return memclient.add(key, value);
}
public boolean add(String key, Object value, Date expiry) {
return memclient.add(key, value,expiry);
}
/**
* 根据指定的关键删除缓存中的对象
*
* @param key
* @return
*/
public boolean delete(String key) {
return memclient.delete(key);
}
public boolean delete(String key, Date expiry){
return memclient.delete(key, expiry);
}
/**
* 根据指定的关键替换缓存中的对象
*
* @param key
* @param value
* @return
*/
public boolean replace(String key, Object value) {
return memclient.replace(key, value);
}
public boolean replace(String key, Object value, Date expiry) {
return memclient.replace(key, value, expiry);
}
/**
* 根据指定的关键获取对象信息
*
* @param key
* @return
*/
public Object get(String key) {
return memclient.get(key);
}
}
测试main方法
package com.memcache;
public class MemcacheMain {
/**
* 利用MemCached对象将集合存入缓存,并从缓存中取出
*
* @param args
*/
public static void main(String[] args) {
//赋值
Constants.MEMCACHEURL = "192.168.1.123:11211";
//得到MemcachedManager实例
MemcachedManager cached = MemcachedManager.getInstance();
cached.set("a","a1b2c3");
System.out.println(cached.get("a"));
}
}