之前接触过的很多系统都有用到缓存,因为一直也不需要怎么取修改,所以关于缓存一块,很少去关注。最近抽了点时间,来看看缓存相关的东东。
看了些关于Memcache的文章,只是了解到它是在内存里维护着一个很大的键值对的hashMap表类的东西,在系统里使用了它,就可以把一些经常要用到,又很少有改动的东西存在里边,方便用户访问。也就是说,系统在使用过程中,访问的数据可以先去内存中去找,如果存在则直接读内存里的 东西,不存在的情况才去连接数据库查询。这点可以很大程度上避开频繁的数据库连接操作,对系统的性能提升还是相当明显的。
好了,现在开始。。。。
1、首先是在Windows下安装Memcache服务器。
因为现在我用的系统是Windows的,除了之前在学校的时候使用linux/Windows双系统,现在工作生活很少真正的去使用linux了(这点自我觉得应该要改),所以先整了个Windows下安装Memcache服务器来进行学习,这样虚拟机也不需要安装了。
下载安装文件。我找了不少,终于找到了,这里我使用的版本是 memcached-win64-1.4.4-14 64位的 ,下载地址如下:
http://www.2cto.com/uploadfile/2012/0713/20120713110308123.zip
将下载下来的压缩包解压,将memcached目录放在你指定的目录下,
然后打开cmd命令行窗口(XP之后的系统,一定要用管理员身份打开),cd到刚刚说的memcached目录下,输入命令:memcached.exe -d install 安装Memcache服务器,再输入命令:memcached.exe -d start,启动服务。这时,在任务栏就能看到memcached的服务了。
C:\Windows\system32>D:
D:\>cd D:\software\memcached
D:\software\memcached>memcached.exe -d install
D:\software\memcached>memcached.exe -d start
2、下载java使用MemcacheClient的jar包,很多版本,自己选一个就是,链接: http://cn.jarfire.org/memcached.html
3、建一个demo小工程,引入刚刚下载的jar包,在引入log4j-1.2.16.jar,工程的结构目录自己设计,我习惯弄成这样:
4、自己写一个调用Memcached的测试类即可进行测试:(这段测试代码是拿过来用的)
package memcache.demo;
import java.util.Date;
import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
public class Demo {
protected static MemCachedClient mcc = new MemCachedClient();
static {
String[] servers ={"127.0.0.1:11211"}; //Memcache默认的端口11211
Integer[] weights = { 3 };
//创建一个实例对象SockIOPool
SockIOPool pool = SockIOPool.getInstance();
//设置SockIOPool相关信息
pool.setServers( servers );
pool.setWeights( weights );
pool.setInitConn( 5 );
pool.setMinConn( 5 );
pool.setMaxConn( 250 );
pool.setMaxIdle( 1000 * 60 * 60 * 6 );
// set the sleep for the maint thread
// it will wake up every x seconds and
// maintain the pool size
pool.setMaintSleep( 30 );
// Tcp的规则就是在发送一个包之前,本地机器会等待远程主机
// 对上一次发送的包的确认信息到来;这个方法就可以关闭套接字的缓存,
// 以至这个包准备好了就发;
pool.setNagle( false );
//连接建立后对超时的控制
pool.setSocketTO( 3000 );
//连接建立时对超时的控制
pool.setSocketConnectTO( 0 );
// initialize the connection pool
//初始化一些值并与MemcachedServer段建立连接
pool.initialize();
// lets set some compression on for the client
// compress anything larger than 64k
mcc.setCompressEnable( true );
mcc.setCompressThreshold( 64 * 1024 );
}
public static void bulidCache(){
//set(key,value,Date) ,Date是一个过期时间,如果想让这个过期时间生效的话,这里传递的new Date(long date) 中参数date,需要是个大于或等于1000的值。
//因为java client的实现源码里是这样实现的 expiry.getTime() / 1000 ,也就是说,如果 小于1000的值,除以1000以后都是0,即永不过期
mcc.set( "test", "This is a test String" ,new Date(10000)); //十秒后过期
}
public static void output() {
//从cache里取值
String value = (String) mcc.get( "test" );
System.out.println(value);
}
public static void main(String[] args){
bulidCache();
output();
}
}
控制台输出 This is a test String 说明访问Memcache服务器成功了。
另外,看到一篇文章,说阿里大神写了个开源的Memcache框架- -,不过提供的链接看不到源码,有机会学习学习怎么使用。文章地址:
http://stephen830.iteye.com/blog/2112439
还有,关于Memcache和Memcached的区别,一个是项目名称,一个是程序名称,有篇文章讲的很详细,文章地址:
http://nhy520.iteye.com/blog/1775893/