java memcached 存储对象_Memcached 高性能的分布式内存对象缓存系统 Memcached的安装、使用实例...

Memcached

是一个高性能的分布式内存

对象缓存系统,用于动态Web

应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached

基于一个存储键/值对的hashmap

。其守护进程(daemon )是用C写的,但是客户端

可以用任何语言来编写,并通过memcached协议与守护进程通信。但是它并不提供冗余(例如,复制其hashmap条目);当某个服务器S停止运行或崩溃了,所有存放在S上的键/值对都将丢失。

Memcached

由Danga Interactive

开发,其最新版本发布于2010年,作者为Anatoly Vorobey

和Brad

Fitzpatrick。用于提升LiveJournal .

com访问速度的。LJ每秒动态页面访问量几千次,用户700万。Memcached

将数据库负载大幅度降低,更好的分配资源,更快速访问。\

源地址

:http://baike.baidu.com/view/794242.htm

源地址: http://www.blogjava.net/amigoxie/archive/2011/02/15/344381.html

Memcached

的安装

2.1

主程序的安装

一般的服务器都是采用

Linux,笔者只是讲述在

Windows上如何安装

Memcached,在

Linux上的安装请参考网上其它资料。

当前

win32的最新版本是

1.2.6,下载页面参考如下:

25422083_1.jpg

在上图中点击“

memcached-1.2.6-win32-bin.zip

”进入下载页面,下载后,将其解压到

D盘下,解压后的

D:"memcached-1.2.6-win32-bin目录下有一个

memcached.exe。

Windows的命令行(

cmd命令进入命令行)窗口进入该目录,首先运行:

25422083_2.gifmemcached.exe

-

d install

上面这行表示安装

Memcached为服务,这样才能正常运行。接着运行如下这样来启动

Memcached,还可指定

-l参数,表示启动的

IP,

-m表示缓存大小:

25422083_2.gifmemcached.exe

-

d start

若指定了

-m,则表示缓存大小为

-m后的数字,单位是

M,例如:

25422083_2.gifmemcached.exe –l

127.0

.

0.1

–m

32

-

d start

运行参考如下图所示:

25422083_3.jpg

2.2 Java

客户端的安装

下载页面参考如下:

25422083_4.jpg

在上图中点击右侧区域的“Downloads

”,弹出的下载小窗口如下图:

25422083_5.jpg

当前最新的版本是

2.5.2,点击“

java_memcached-release_2.5.2.zip”下载。下载后解压,目录结构如下图所示:

25422083_6.jpg

在应用中,需要将“

java_memcached-release_2.5.2.jar”包拷贝到

Java项目中。

3

Memcached

的使用

3.1

创建项目

MyEclipse中创建一个名为

memcacheddemo的测试项目,

src放源代码,

bin放

classes文件,

lib放

jar包,并将

java_memcached-release_2.5.2.jar拷贝到

lib目录中,目录结构如下:

25422083_7.jpg

3.2 SockIOPool

类及其常用方法

SockIOPool是

socket连接池类,常用方法如下:

l

setServers(String[] servers):设置服务器信息数组;

l

setWeights(String[] weights):设置服务器权重数组;

l

setInitConn(int count):设置初始连接数;

l

setMinConn(int minConn):设置最小连接数;

l

setMaxConn(int maxConn):设置最大连接数;

l

setMaxIdle(long arg0):设置最大处理时间;

l

setMaintSleep(long arg0):主线程的睡眠时间;

l

initialize():初始化连接池。

3.3 MemCachedClient

类及其常用方法

MemCachedClient类用于对

Memcached内存对象缓存系统进行操作,常用方法如下:

l

add(String key, Object value):添加一个键值对到缓存中;

l

add(String key, Object value,Date expires):添加一个键值对到缓存中,并设置其超时时间;

l

set(String key, Object value):在缓存中设置一个键的值;

l

set(String key, Object value, Date expires):在缓存中设置一个键的值,并设置其超时时间;

l

get(String key):获得某个键的值。

l

incr(String key):为某个键上的值执行

+1操作;

l

decr(String key):为某个键上的值执行

-1操作;

l

replace(String key, String value):将某个键的值替换成新的值;

l

replace(String key, String value, Date expires):将某个键的值替换成新的值,并设置其超时时间。

3.4

使用实例

memcacheddemo工程的源码目录创建测试的

Java类

MemcachedTest,该类的代码参考如下:

25422083_2.gifimport

java.util.Date;

25422083_2.gif

25422083_2.gif

import

com.danga.MemCached.MemCachedClient;

25422083_2.gif

import

com.danga.MemCached.SockIOPool;

25422083_2.gif

25422083_8.gif

/**

25422083_9.gif

* 使用memcached的缓存测试类.

25422083_9.gif

*

@author

阿蜜果

25422083_10.gif

*/

25422083_8.gif

public

class

MemcachedTest

{

25422083_9.gif

//

创建全局的唯一实例

25422083_9.gif

protected

static

MemCachedClient mcc

=

new

MemCachedClient();

25422083_9.gif

25422083_9.gif

protected

static

MemcachedTest memCached

=

new

MemcachedTest();

25422083_9.gif

25422083_9.gif

//

设置与缓存服务器的连接池

25422083_11.gif

static

{

25422083_9.gif

//

服务器列表和其权重

25422083_11.gif

String[] servers

=

{

"

127.0.0.1:11211

"

}

;

25422083_11.gif

Integer[] weights

=

{

3

}

;

25422083_9.gif

25422083_9.gif

//

获取socket连接池的实例对象

25422083_9.gif

SockIOPool pool

=

SockIOPool.getInstance();

25422083_9.gif

25422083_9.gif

//

设置服务器信息

25422083_9.gif

pool.setServers(servers);

25422083_9.gif

pool.setWeights(weights);

25422083_9.gif

25422083_9.gif

//

设置初始连接数、最小和最大连接数以及最大处理时间

25422083_9.gif

pool.setInitConn(

5

);

25422083_9.gif

pool.setMinConn(

5

);

25422083_9.gif

pool.setMaxConn(

250

);

25422083_9.gif

pool.setMaxIdle(

1000

*

60

*

60

*

6

);

25422083_9.gif

25422083_9.gif

//

设置主线程的睡眠时间

25422083_9.gif

pool.setMaintSleep(

30

);

25422083_9.gif

25422083_9.gif

//

设置TCP的参数,连接超时等

25422083_9.gif

pool.setNagle(

false

);

25422083_9.gif

pool.setSocketTO(

3000

);

25422083_9.gif

pool.setSocketConnectTO(

0

);

25422083_9.gif

25422083_9.gif

//

初始化连接池

25422083_9.gif

pool.initialize();

25422083_9.gif

25422083_9.gif

//

压缩设置,超过指定大小(单位为K)的数据都会被压缩

25422083_9.gif

mcc.setCompressEnable(

true

);

25422083_9.gif

mcc.setCompressThreshold(

64

*

1024

);

25422083_12.gif

}

25422083_9.gif

25422083_11.gif

/**

25422083_9.gif

* 保护型构造方法,不允许实例化

25422083_12.gif

*/

25422083_11.gif

protected

MemcachedTest()

{

25422083_9.gif

25422083_12.gif

}

25422083_9.gif

25422083_11.gif

/**

25422083_9.gif

* 获取唯一实例.

25422083_9.gif

*

@return

25422083_12.gif

*/

25422083_11.gif

public

static

MemcachedTest getInstance()

{

25422083_9.gif

return

memCached;

25422083_12.gif

}

25422083_9.gif

25422083_11.gif

/**

25422083_9.gif

* 添加一个指定的值到缓存中.

25422083_9.gif

*

@param

key 键

25422083_9.gif

*

@param

value 值

25422083_9.gif

*

@return

在缓存中若该key不存在,并成功添加返回true,否则将返回false

25422083_12.gif

*/

25422083_11.gif

public

boolean

add(String key, Object value)

{

25422083_9.gif

return

mcc.add(key, value);

25422083_12.gif

}

25422083_9.gif

25422083_11.gif

/**

25422083_9.gif

* 添加一个键值对到缓存中.

25422083_9.gif

*

@param

key 键

25422083_9.gif

*

@param

value 值

25422083_9.gif

*

@param

expires 超时时间

25422083_9.gif

*

@return

在缓存中若该key不存在,并成功添加返回true,否则将返回false

25422083_12.gif

*/

25422083_11.gif

public

boolean

add(String key, Object value, Date expires)

{

25422083_9.gif

return

mcc.add(key, value, expires);

25422083_12.gif

}

25422083_9.gif

25422083_11.gif

/**

25422083_9.gif

* 将某个键的值改变成新值,首先需要保证该键存在.

25422083_9.gif

*

@param

key 键

25422083_9.gif

*

@param

value 值

25422083_9.gif

*

@return

成功返回true,失败返回false

25422083_12.gif

*/

25422083_11.gif

public

boolean

replace(String key, Object value)

{

25422083_9.gif

return

mcc.replace(key, value);

25422083_12.gif

}

25422083_9.gif

25422083_11.gif

/**

25422083_9.gif

* 将某个键的值改变成新值,首先需要保证该键存在.

25422083_9.gif

*

@param

key 键

25422083_9.gif

*

@param

value 值

25422083_9.gif

*

@param

expires 超时时间

25422083_9.gif

*

@return

成功返回true,失败返回false

25422083_12.gif

*/

25422083_11.gif

public

boolean

replace(String key, Object value, Date expires)

{

25422083_9.gif

return

mcc.replace(key, value, expires);

25422083_12.gif

}

25422083_9.gif

25422083_11.gif

/**

25422083_9.gif

* 添加一个指定的值到缓存中.

25422083_9.gif

*

@param

key

25422083_9.gif

*

@param

value

25422083_9.gif

*

@return

成功返回true,否则返回false

25422083_12.gif

*/

25422083_11.gif

public

boolean

set(String key, Object value)

{

25422083_9.gif

return

mcc.set(key, value);

25422083_12.gif

}

25422083_9.gif

25422083_11.gif

/**

25422083_9.gif

* 添加一个指定的值到缓存中,并设置其超时时间.

25422083_9.gif

*

@param

key 键

25422083_9.gif

*

@param

value 值

25422083_9.gif

*

@param

expires 超时时间

25422083_9.gif

*

@return

成功返回true,否则返回false

25422083_12.gif

*/

25422083_11.gif

public

boolean

set(String key, Object value,

int

expires)

{

25422083_9.gif

return

mcc.set(key, value, expires);

25422083_12.gif

}

25422083_9.gif

25422083_11.gif

/**

25422083_9.gif

* 根据指定的关键字获取对象.

25422083_9.gif

*

@param

key

25422083_9.gif

*

@return

返回value

25422083_12.gif

*/

25422083_11.gif

public

Object get(String key)

{

25422083_9.gif

return

mcc.get(key);

25422083_12.gif

}

25422083_9.gif

25422083_11.gif

/**

25422083_9.gif

* 将指定key的value值+1,将返回最后的value值

25422083_9.gif

*

@param

key

25422083_9.gif

*

@return

返回最后的value值

25422083_12.gif

*/

25422083_11.gif

public

long

incr(String key)

{

25422083_9.gif

return

mcc.incr(key);

25422083_12.gif

}

25422083_9.gif

25422083_11.gif

/**

25422083_9.gif

* 将指定key的value值-1,将返回最后的value值

25422083_9.gif

*

@param

key

25422083_9.gif

*

@return

返回最后的value值

25422083_12.gif

*/

25422083_11.gif

public

long

decr(String key)

{

25422083_9.gif

return

mcc.decr(key);

25422083_12.gif

}

25422083_9.gif

25422083_11.gif

/**

25422083_9.gif

* 测试方法

25422083_9.gif

*

@param

args

25422083_12.gif

*/

25422083_11.gif

public

static

void

main(String[] args)

{

25422083_9.gif

MemcachedTest cache

=

MemcachedTest.getInstance();

25422083_9.gif

cache.set(

"

count

"

,

123

);

25422083_9.gif

System.out.println(

"

count=

"

+

cache.get(

"

count

"

));

25422083_9.gif

boolean

flag

=

cache.add(

"

schedule_2

"

,

"

0

"

);

25422083_9.gif

System.out.println(

"

flag=

"

+

flag);

25422083_9.gif

System.out.println(

"

schedule_2=

"

+

cache.get(

"

schedule_2

"

));

25422083_12.gif

}

25422083_10.gif

}

运行结果为:

25422083_2.gifcount

=

123

25422083_2.gif

flag

=

true

25422083_2.gif

schedule_2

=

0

4

、附录

Memcached Java客户端编程》:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值