首先是下载 memcached 了,目前最新版本是 1.1.12,直接从官方网站即可下载到 memcached-1.1.12.tar.gz。除此之外,memcached 用到了 libevent,我下载的是 libevent-1.1a.tar.gz。
接下来是分别将 libevent-1.1a.tar.gz 和 memcached-1.1.12.tar.gz 解开包、编译、安装:
# tar -xzf libevent-1.1a.tar.gz
# cd libevent-1.1a
# ./configure -prefix=/usr
# make
# make install
# cd ..
# tar -xzf memcached-1.1.12.tar.gz
# cd memcached-1.1.12
# ./configure -prefix=/usr
# make
# make install
安装完成之后,memcached 应该在 /usr/bin/memcached。
然后启动memcached: ./memcached -d -m 128 -u root -p 11211 -c 256
-h 显示帮助
然后使用下列命令来查看是否启动成功:
ps aux | grep memcached
首先下载memcache的jar包,导入工程中,然后运行如下代码:
import java.util.Date;
import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
public class Main {
// 创建全局的唯一实例
protected static MemCachedClient mcc = new MemCachedClient();
protected static Main memCached = new Main();
// 设置与缓存服务器的连接池
static {
// 服务器列表和其权重
String[] servers = { "192.168.159.128:11211" };
Integer[] weights = { 3 };
// 获取socke连接池的实例对象
SockIOPool pool = SockIOPool.getInstance();
// 设置服务器信息
pool.setServers( servers );
pool.setWeights( weights );
// 设置初始连接数、最小和最大连接数以及最大处理时间
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 );
}
/**
* 保护型构造方法,不允许实例化!
*
*/
protected Main()
{
}
/**
* 获取唯一实例.
* @return
*/
public static Main getInstance()
{
return memCached;
}
/**
* 添加一个指定的值到缓存中.
* @param key
* @param value
* @return
*/
public boolean add(String key, Object value)
{
return mcc.add(key, value);
}
public boolean add(String key, Object value, Date expiry)
{
return mcc.add(key, value, expiry);
}
public boolean replace(String key, Object value)
{
return mcc.replace(key, value);
}
public boolean replace(String key, Object value, Date expiry)
{
return mcc.replace(key, value, expiry);
}
/**
* 根据指定的关键字获取对象.
* @param key
* @return
*/
public Object get(String key)
{
return mcc.get(key);
}
public static void main(String[] args)
{
Main cache = Main.getInstance();
cache.add( "hello" , 234 );
System.out.print( "get value : " + cache.get("hello"));
}
}
console端打印如下:
[DEBUG] [2012-03-27 15:56:10] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = initialize | Line = 617 ] | [++++ initializing pool with following settings:] |
[DEBUG] [2012-03-27 15:56:10] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = initialize | Line = 618 ] | [++++ initial size: 5] |
[DEBUG] [2012-03-27 15:56:10] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = initialize | Line = 619 ] | [++++ min spare : 5] |
[DEBUG] [2012-03-27 15:56:10] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = initialize | Line = 620 ] | [++++ max spare : 250] |
[DEBUG] [2012-03-27 15:56:10] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = populateBuckets | Line = 647 ] | [++++ initializing internal hashing structure for consistent hashing] |
[DEBUG] [2012-03-27 15:56:10] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = populateBuckets | Line = 657 ] | [++++ added 192.168.159.128:11211 to server bucket] |
[DEBUG] [2012-03-27 15:56:10] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = populateBuckets | Line = 657 ] | [++++ added 192.168.159.128:11211 to server bucket] |
[DEBUG] [2012-03-27 15:56:10] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = populateBuckets | Line = 657 ] | [++++ added 192.168.159.128:11211 to server bucket] |
[DEBUG] [2012-03-27 15:56:10] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = populateBuckets | Line = 668 ] | [+++ creating initial connections (5) for host: 192.168.159.128:11211] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = createSocket | Line = 818 ] | [++++ created socket (Socket[addr=/192.168.159.128,port=11211,localport=4160]) for host: 192.168.159.128:11211] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = populateBuckets | Line = 679 ] | [++++ created and added socket: Socket[addr=/192.168.159.128,port=11211,localport=4160] for host 192.168.159.128:11211] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = createSocket | Line = 818 ] | [++++ created socket (Socket[addr=/192.168.159.128,port=11211,localport=4161]) for host: 192.168.159.128:11211] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = populateBuckets | Line = 679 ] | [++++ created and added socket: Socket[addr=/192.168.159.128,port=11211,localport=4161] for host 192.168.159.128:11211] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = createSocket | Line = 818 ] | [++++ created socket (Socket[addr=/192.168.159.128,port=11211,localport=4162]) for host: 192.168.159.128:11211] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = populateBuckets | Line = 679 ] | [++++ created and added socket: Socket[addr=/192.168.159.128,port=11211,localport=4162] for host 192.168.159.128:11211] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = createSocket | Line = 818 ] | [++++ created socket (Socket[addr=/192.168.159.128,port=11211,localport=4163]) for host: 192.168.159.128:11211] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = populateBuckets | Line = 679 ] | [++++ created and added socket: Socket[addr=/192.168.159.128,port=11211,localport=4163] for host 192.168.159.128:11211] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = createSocket | Line = 818 ] | [++++ created socket (Socket[addr=/192.168.159.128,port=11211,localport=4164]) for host: 192.168.159.128:11211] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = populateBuckets | Line = 679 ] | [++++ created and added socket: Socket[addr=/192.168.159.128,port=11211,localport=4164] for host 192.168.159.128:11211] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = getSock | Line = 879 ] | [cache socket pick hello null] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = getConnection | Line = 1027 ] | [++++ moving socket for host (192.168.159.128:11211) to busy pool ... socket: Socket[addr=/192.168.159.128,port=11211,localport=4164]] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = getSock | Line = 935 ] | [cache choose 192.168.159.128:11211 for hello] |
[INFO] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.MemCachedClient | Method = set | Line = 740 ] | [Storing with native handler...] |
[DEBUG] [2012-03-27 15:56:11] [Thread = MaintThread | Class = com.danga.MemCached.SockIOPool | Method = selfMaint | Line = 1294 ] | [++++ Starting self maintenance....] |
[DEBUG] [2012-03-27 15:56:11] [Thread = MaintThread | Class = com.danga.MemCached.SockIOPool | Method = selfMaint | Line = 1308 ] | [++++ Size of avail pool for host (192.168.159.128:11211) = 4] |
[DEBUG] [2012-03-27 15:56:11] [Thread = MaintThread | Class = com.danga.MemCached.SockIOPool | Method = selfMaint | Line = 1327 ] | [++++ Need to create 1 new sockets for pool for host: 192.168.159.128:11211] |
[DEBUG] [2012-03-27 15:56:11] [Thread = MaintThread | Class = com.danga.MemCached.SockIOPool | Method = createSocket | Line = 818 ] | [++++ created socket (Socket[addr=/192.168.159.128,port=11211,localport=4165]) for host: 192.168.159.128:11211] |
[DEBUG] [2012-03-27 15:56:11] [Thread = MaintThread | Class = com.danga.MemCached.SockIOPool | Method = selfMaint | Line = 1357 ] | [++++ Size of avail pool for host (192.168.159.128:11211) = 5] |
[DEBUG] [2012-03-27 15:56:11] [Thread = MaintThread | Class = com.danga.MemCached.SockIOPool | Method = selfMaint | Line = 1401 ] | [++++ Size of busy pool for host (192.168.159.128:11211) = 1] |
[DEBUG] [2012-03-27 15:56:11] [Thread = MaintThread | Class = com.danga.MemCached.SockIOPool | Method = selfMaint | Line = 1443 ] | [+++ ending self maintenance.] |
[DEBUG] [2012-03-27 15:56:11] [Thread = MaintThread | Class = com.danga.MemCached.SockIOPool | Method = selfMaint | Line = 1294 ] | [++++ Starting self maintenance....] |
[DEBUG] [2012-03-27 15:56:11] [Thread = MaintThread | Class = com.danga.MemCached.SockIOPool | Method = selfMaint | Line = 1308 ] | [++++ Size of avail pool for host (192.168.159.128:11211) = 5] |
[DEBUG] [2012-03-27 15:56:11] [Thread = MaintThread | Class = com.danga.MemCached.SockIOPool | Method = selfMaint | Line = 1357 ] | [++++ Size of avail pool for host (192.168.159.128:11211) = 5] |
[DEBUG] [2012-03-27 15:56:11] [Thread = MaintThread | Class = com.danga.MemCached.SockIOPool | Method = selfMaint | Line = 1401 ] | [++++ Size of busy pool for host (192.168.159.128:11211) = 1] |
[DEBUG] [2012-03-27 15:56:11] [Thread = MaintThread | Class = com.danga.MemCached.SockIOPool | Method = selfMaint | Line = 1443 ] | [+++ ending self maintenance.] |
[DEBUG] [2012-03-27 15:56:11] [Thread = MaintThread | Class = com.danga.MemCached.SockIOPool | Method = selfMaint | Line = 1294 ] | [++++ Starting self maintenance....] |
[DEBUG] [2012-03-27 15:56:11] [Thread = MaintThread | Class = com.danga.MemCached.SockIOPool | Method = selfMaint | Line = 1308 ] | [++++ Size of avail pool for host (192.168.159.128:11211) = 5] |
[DEBUG] [2012-03-27 15:56:11] [Thread = MaintThread | Class = com.danga.MemCached.SockIOPool | Method = selfMaint | Line = 1357 ] | [++++ Size of avail pool for host (192.168.159.128:11211) = 5] |
[DEBUG] [2012-03-27 15:56:11] [Thread = MaintThread | Class = com.danga.MemCached.SockIOPool | Method = selfMaint | Line = 1401 ] | [++++ Size of busy pool for host (192.168.159.128:11211) = 1] |
[DEBUG] [2012-03-27 15:56:11] [Thread = MaintThread | Class = com.danga.MemCached.SockIOPool | Method = selfMaint | Line = 1443 ] | [+++ ending self maintenance.] |
[DEBUG] [2012-03-27 15:56:11] [Thread = MaintThread | Class = com.danga.MemCached.SockIOPool | Method = selfMaint | Line = 1294 ] | [++++ Starting self maintenance....] |
[DEBUG] [2012-03-27 15:56:11] [Thread = MaintThread | Class = com.danga.MemCached.SockIOPool | Method = selfMaint | Line = 1308 ] | [++++ Size of avail pool for host (192.168.159.128:11211) = 5] |
[DEBUG] [2012-03-27 15:56:11] [Thread = MaintThread | Class = com.danga.MemCached.SockIOPool | Method = selfMaint | Line = 1357 ] | [++++ Size of avail pool for host (192.168.159.128:11211) = 5] |
[DEBUG] [2012-03-27 15:56:11] [Thread = MaintThread | Class = com.danga.MemCached.SockIOPool | Method = selfMaint | Line = 1401 ] | [++++ Size of busy pool for host (192.168.159.128:11211) = 1] |
[DEBUG] [2012-03-27 15:56:11] [Thread = MaintThread | Class = com.danga.MemCached.SockIOPool | Method = selfMaint | Line = 1443 ] | [+++ ending self maintenance.] |
[INFO] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.MemCachedClient | Method = set | Line = 824 ] | [++++ memcache cmd (result code): add hello 4 0 4
(STORED)] |
[INFO] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.MemCachedClient | Method = set | Line = 827 ] | [++++ data successfully stored for key: hello] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.SockIOPool$SockIO | Method = close | Line = 1714 ] | [++++ marking socket (Socket[addr=/192.168.159.128,port=11211,localport=4164]) as closed and available to return to avail pool] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = checkIn | Line = 1151 ] | [++++ calling check-in on socket: Socket[addr=/192.168.159.128,port=11211,localport=4164] for host: 192.168.159.128:11211] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = checkIn | Line = 1156 ] | [++++ removing socket (Socket[addr=/192.168.159.128,port=11211,localport=4164]) from busy pool for host: 192.168.159.128:11211] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = checkIn | Line = 1162 ] | [++++ returning socket (Socket[addr=/192.168.159.128,port=11211,localport=4164] to avail pool for host: 192.168.159.128:11211] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = getSock | Line = 879 ] | [cache socket pick hello null] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = getConnection | Line = 1027 ] | [++++ moving socket for host (192.168.159.128:11211) to busy pool ... socket: Socket[addr=/192.168.159.128,port=11211,localport=4164]] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = getSock | Line = 935 ] | [cache choose 192.168.159.128:11211 for hello] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.MemCachedClient | Method = get | Line = 1276 ] | [++++ memcache get command: get hello
] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.MemCachedClient | Method = get | Line = 1288 ] | [++++ line: VALUE hello 4 4] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.MemCachedClient | Method = get | Line = 1296 ] | [++++ key: hello] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.MemCachedClient | Method = get | Line = 1297 ] | [++++ flags: 4] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.MemCachedClient | Method = get | Line = 1298 ] | [++++ length: 4] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.MemCachedClient | Method = get | Line = 1288 ] | [++++ line: END] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.MemCachedClient | Method = get | Line = 1380 ] | [++++ finished reading from cache server] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.SockIOPool$SockIO | Method = close | Line = 1714 ] | [++++ marking socket (Socket[addr=/192.168.159.128,port=11211,localport=4164]) as closed and available to return to avail pool] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = checkIn | Line = 1151 ] | [++++ calling check-in on socket: Socket[addr=/192.168.159.128,port=11211,localport=4164] for host: 192.168.159.128:11211] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = checkIn | Line = 1156 ] | [++++ removing socket (Socket[addr=/192.168.159.128,port=11211,localport=4164]) from busy pool for host: 192.168.159.128:11211] |
[DEBUG] [2012-03-27 15:56:11] [Thread = main | Class = com.danga.MemCached.SockIOPool | Method = checkIn | Line = 1162 ] | [++++ returning socket (Socket[addr=/192.168.159.128,port=11211,localport=4164] to avail pool for host: 192.168.159.128:11211] |
get value : 234
连上memcache,然后stats,详细如下:
mqq@32_167_game:~> telnet server port
Trying 172.16.32.166...
Connected to 172.16.32.166.
Escape character is '^]'.
stats
这样就能显示memcached的信息,
指令格式: <命令> <键> <标记> <有效期> <数据长度>\r\n <命令> - command name
主要是三个储存数据的三个命令, set, add, replace