Memcache学习笔记(1)——Windows下安装Memcache服务器——java下调用MemcacheClient测试类Demo
之前接触过的很多系统都有用到缓存,因为一直也不需要怎么取修改,所以关于缓存一块,很少去关注。最近抽了点时间,来看看缓存相关的东东。
看了些关于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/