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

}

}

最后打印结果:a1b2c3,则正确,否则错误。