20,704浏览
现在缓存开源系统有好些个,比如JCS,OSCache,EHCache等等,但当你想用一种分布式的缓存策略的话,那么还有一个缓存系统Memcached应当是你的首选。
下面就来介绍一下Memcached。
1、 什么是Memcached;
Memcached是一个开源的高性能,分布式的内存对象缓存系统,通过键值队的形式来对数据进行存取,Memcached是简单而强大,它的简单设计促进快速部署,易于开发,解决了大数据缓存面临的许多问题。
官方网址是:http://memcached.org/,目前已经有很多知名的互联网应用使用到了Memcached,比如Wikipedia、Flickr、Youtube、Wordpress等等。
2、 下载Windows平台下的MemCached,地址为:;
http://code.jellycan.com/files/memcached-1.2.6-win32-bin.zip
对应的源码地址为:
http://code.jellycan.com/files/memcached-1.2.6-win32-src.zip
然后,解压开来,会看到一个memcached.exe文件,进行如下图的安装,将以系统服务的形式安装到机上
然后查看系统服务,会发现已经可以看到memcached服务了
然后,选中此服务点鼠标右键,启动此服务。
在DOS界面中输入:telnet 127.0.0.1 11211来确认服务是否启动无误,如果无误,则会显示如下窗口:
上面图中显示的ERROR是我随便输入字符后按回车显示的,这是因为你需要安装memcached规定的协议来进行输入,否则就显示如上所示错误。
3、 memcached的协议与数据存取;
所谓协议,可以理解为对其操作(数据存取)的语法规则,存取数据的常用命令和参数如下:
set:存入一条记录
key:记录的键值
flags:十进制的int,标识存储记录时的客户端标志,在记录取出时会返回。
exptim:数据的过期时间,0表示不过期,其他数值则表示有效的毫秒数,在过期后,客户端将取不到这条记录,memcached中的过期记录会被清空或删除。
get:表示从memcached取出key对应的值,如果没有对应的值则返回结束标志END
append:表示对key所对应的值在最后再加入输入的内容
delete:删除key对应的值
更多协议可参考:memcached包中所带的protocol.txt
具体例子如:
需要注意的是:在set时如果指定的字符长度为5,而输入的内容超过了这个长度,那么就会报错:CLIENT_ERROR bad data chunk
4、 编写代码对memcached进行数据存取操作;
一般而言,可以使用开源已封装好的memcached客户端来对memcached进行操作,当然你也可以根据memcached的协议在代码中通过编写socket通信程序实现。
Memcached-Java-Client的下载页面:
http://github.com/gwhalin/Memcached-Java-Client/downloads,然后选择下载:
java_memcached-release_2.5.1.zip
在解压开的Test目录中可以看到有些写好的例子,可以通过运行com.danga.MemCached.test. TestMemcached来查看数据存入和取出情况,这里也贴出其代码:
package com.danga.MemCached.test;
import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
import org.apache.log4j.*;
public class TestMemcached {
public static void main(String[] args) {
//memcached should be running on port 11211 but NOT on 11212
BasicConfigurator.configure();
//缓存服务器地址,多台服务器则以逗号隔开,11211为memcached使用的端口号
String[] servers = { “localhost:11211″ };
//得到一个链接池对象并进行一些初始化工作
SockIOPool pool = SockIOPool.getInstance();
pool.setServers( servers );
pool.setFailover( true );
pool.setInitConn( 10 );
pool.setMinConn( 5 );
pool.setMaxConn( 250 );
//pool.setMaintSleep( 30 );
pool.setNagle( false );
pool.setSocketTO( 3000 );
pool.setAliveCheck( true );
pool.initialize();
MemCachedClient mcc = new MemCachedClient();
//turn off most memcached client logging:
//Logger.getLogger( MemCachedClient.class.getName() ).setLevel( com.schooner.MemCached.Logger. );
//以下是数据写入和取出操作例子
for( int i = 0; i < 10; i++ ) {
boolean success = mcc.set( “” + i, “Hello!” );
String result = (String)mcc.get( “” + i );
System.out.println( String.format( “set( %d ): %s”, i, success ) );
System.out.println( String.format( “get( %d ): %s”, i, result ) );
}
System.out.println( “\n\t — sleeping –\n” );
try{ Thread.sleep( 10000 ); } catch ( Exception ex ) { }
for( int i = 0; i < 10; i++ ) {
boolean success = mcc.set( “” + i, “Hello!” );
String result = (String)mcc.get( “” + i );
System.out.println( String.format( “set( %d ): %s”, i, success ) );
System.out.println( String.format( “get( %d ): %s”, i, result ) );
}
}
}
版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: