在现在这个高效率的社会中,怎样将这个高效率应用到本身的程序中,是一个值得追寻和值得探讨的问题。由于这个memcache可以很好的提升检索速度,提高用户体验,并且重要的是减小数据库的访问。这就大大的提升了整个应用系统的档次。所以,在应用程序的开发中加入这样的一个技术无疑是给本身的程序锦上添花。瞬间就会显得高大上,像如今不少的web应用,都将一些基础信息直接放到远程缓存系统中,并且该缓存中的key的有效时间也是能够进行任意设定的。这就显得更加人性化,用起来更加方便!好了,废话很少说,实践是检验真理的惟一标准。java
做者:itRed 邮箱:it_red@sina.com 博客:http://www.cnblogs.com/itred
一.关于Memcache:linux
我认为在正式开始操做memcache以前仍是应该了解一下即将要操做的这个是什么。Memcached基于一个存储键/值对的hashmap。其守护进程是用C语言写的,可是客户端的应用操做上是能够用任何语言编写,并经过memcached协议与守护进程通讯。服务器端能够是windows,也能够是Linux。本博文将先介绍在windows下搭建和配置缓存服务器系统,在后面的博文中再进行介绍在linux中的安装和配置。web
memcached是高性能的分布式内存缓存服务器。至关于开辟一大块儿内存用来存储,通常的使用目的是,经过缓存数据库查询结果,减小数据库访问次数,以提升动态Web应用的速度、提升可扩展性。算法
Memcached的官网:http://memcached.org/ ,任何版本和一些操做api均可以从上面下载。数据库
二.安装服务器端:windows
>E: >cd memcached >cd memcached121 >memcached.exe –d install >memcached.exe –d start
安装过程如图示:api
4. 验证安装是否成功:缓存
待安装完成后,须要验证本身的memcache是否安装成功,这个时候,打开windows的服务界面就能够查看到安装后的memcache是否在列表中,而且能够看到该服务是否已经启动。服务器
效果如图:eclipse
5. 此时安装已经完成,咱们能够先在dos下体验一下缓存服务器的做用。打开dos窗口,输入如下命令:
>telnet 127.0.0.1 11211
注意这个的默认端口是11211
输入完成,确认后会进入缓存服务器的界面,而后就 能够用命令进行操做了。
基础命令:
格式:<command name> <key> <flags> <exptime> <bytes> <data block>
解释:
<command name> |
set/add/replace/get 等 |
<key> |
查找关键字 |
<flags> |
客户机使用它存储关于键值对的额外信息 |
<exptime> |
该数据的存活时间,0表示永远 |
<bytes> |
存储字节数 |
<data block> |
存储的数据块(可直接理解为key-value结构中的value) |
图示:
在缓存服务器上存储username,有效时间是20s,当我在20秒时间内输入get username 时,就会获得最开始设置的那个itRed值。至关于就是key-value ====》username-itRed (键值对);可是,当username的有效期已通过了时,即超过20秒后,我再去取username的值时就会出现END,NULL空值。由于已经失效。以下图所示:
6. 接下来须要作的事用java程序进行操做:
在myeclipse中新建一个java工程,导入jar包。如图示:
贴出测试的源代码,附上代码注释。运行后的测试结果彻底和在dos下操做同样。测试方法,运行程序后,在dos中用get方法查看是否能拿到开始设置的值。
package com.red.memcached; import java.util.Date; import com.danga.MemCached.MemCachedClient; import com.danga.MemCached.SockIOPool; public class Cache { public static void main(String[] args) { MemCachedClient memcacheClient = new MemCachedClient(); String[] address = { "127.0.0.1:11211" };//缓存服务器列表 Integer[] weights = { 3 }; SockIOPool pool = SockIOPool.getInstance(); pool.setServers(address); pool.setWeights(weights); pool.setInitConn(5); pool.setMinConn(5); pool.setMaxConn(200); pool.setMaxIdle(1000 * 30 * 30); // 设置可用链接池的最长等待时间 pool.setMaintSleep(30); pool.setNagle(false); // 设置是否使用Nagle算法,由于咱们的通信数据量一般都比较大(相对TCP控制数据)并且要求响应及时,所以该值须要设置为false(默认是true) pool.setSocketTO(30);// 设置socket的读取等待超时值 pool.setSocketConnectTO(0); pool.initialize(); // 将数据放入缓存 memcacheClient.set("username", "Red"); // 将数据放入缓存,并设置失效时间 Date date = new Date(2000000); memcacheClient.set("user", "itRed", date); // 删除缓存数据 // memcacheClient.delete("user"); // memcacheClient.delete("username"); // 获取缓存数据 String str = (String) memcacheClient.get("username"); System.out.println(str); } }
这个案例只是用java语言实现,实际上是用memcached的客户端能够用任何语言进行实现,若是你看懂了这个程序,可是你不知道如何将这个缓存加入到你的程序中?其实这是很好办的,只须要将这个demo放入工具包中,将这个demo做为一个工具类,须要用的时候,只须要将这个调用这个方法就能够了。很简单,是吧!哈哈。在下一篇博文中就会介绍在linux环境下搭建一个和这个同样的memcached缓存系统。两种相比之下,其实我认为第二种应该是目前不少公司都会采用的。
做者:itRed
邮箱:it_red@sina.com 博客:http://www.cnblogs.com/itred ***版权声明:本文版权归做者和博客园共有,欢迎转载,但请在文章显眼位置标明文章出处。未经本人书面赞成,将其做为他用,本人保留追究责任的全部权利。