Memcache在windows下的安装

Memcache是什么(摘自 http://blog.sina.com.cn/s/blog_4aea5d890100am61.html
Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。
它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable。
Memcache官方网站:http://www.danga.com/memcached,更多详细的信息可以来这里了解 :)

为什么会有Memcache和memcached两种名称?
其实Memcache是这个项目的名称,而memcached是它服务器端的主程序文件名,知道我的意思了把~~~~。一个是项目名称,一个是主程序文件名,在网上看到了很多人不明白,于是混用了。

Memcache的安装
分为两个过程:memcache服务器端的安装和memcached客户端的安装。
所谓服务器端的安装就是在服务器(一般都是linux系统)上安装Memcache实现数据的存储
所谓客户端的安装就是指php(或者其他程序,Memcache还有其他不错的api接口提供)去使用服务器端的Memcache提供的函数,需要php添加扩展。

memcache服务器端的安装(参考http://www.ccvita.com/258.html

http://www.splinedancer.com/memcached-win32/下载memcached 1.2.4 Win32 Beta Binaries安装包(如果要下载源码编译,官网上有详细的介绍),解压到d:/memcached。

在cmd命令行下输入d:/memcached/memcached.exe -h,查看memcached的启动参数

memcached的启动参数为

  -p 监听的端口
  -l 连接的IP地址, 默认是本机
  -d start 启动memcached服务
  -d restart 重起memcached服务
  -d stop|shutdown 关闭正在运行的memcached服务
  -d install 安装memcached服务
  -d uninstall 卸载memcached服务
  -u 以的身份运行 (仅在以root运行的时候有效)
  -m 最大内存使用,单位MB。默认64MB
  -M 内存耗尽时返回错误,而不是删除项
  -c 最大同时连接数,默认是1024
  -f 块大小增长因子,默认是1.25
  -n 最小分配空间,key+value+flags默认是48
  -h 显示帮助

输入memcached -d start 即可启动memcached服务

memcached作为服务启动

在cmd命令行下输入“d:/memcachedmemcached.exe -d install”作为服务,再输入“d:/memcached/memcached.exe -d start”启动。以后memcached将作为windows的一个服务每次开机时自动启动。

memcache客户端的安装

客户端的版本很多,各种语言的都有,下面主要使用的是java客户端gwhalin

在https://github.com/gwhalin/Memcached-Java-Client下载gwhalin-Memcached-Java-Client-b22f90d.zip,解压到d:/memcached-client/java。 

参照了http://blog.csdn.net/chfzhb/archive/2008/08/25/2828747.aspx的实例代码

Java代码 复制代码 收藏代码
  1. import com.meetup.memcached.MemcachedClient;   
  2. import com.meetup.memcached.SockIOPool;   
  3. import java.util.Date;   
  4.   
  5. public class Test {   
  6.   
  7.     protected static MemcachedClient mcc = new MemcachedClient();   
  8.     static {   
  9.         String[] servers = { “127.0.0.1:11211″ };   
  10.         Integer[] weights = { 3 };   
  11.   
  12.         // 创建一个实例对象SocketIOPool   
  13.         SockIOPool pool = SockIOPool.getInstance();   
  14.   
  15.         // 设置Memcached Server   
  16.         pool.setServers(servers);   
  17.         // 设置Memcached权重   
  18.         pool.setWeights(weights);   
  19.   
  20.         // 初始化5个连接   
  21.         pool.setInitConn(5);   
  22.         // 最小5个连接   
  23.         pool.setMinConn(5);   
  24.         // 最大250个连接   
  25.         pool.setMaxConn(250);   
  26.         // 一个连接最大句柄时间为6小时   
  27.         pool.setMaxIdle(1000 * 60 * 60 * 6);   
  28.         // 设置休眠以维持线程,它每30秒苏醒以此维护池大小   
  29.         pool.setMaintSleep(30);   
  30.         // Tcp的规则就是在发送一个包之前,本地机器会等待远程主机   
  31.         // 对上一次发送的包的确认信息到来;这个方法就可以关闭套接字的缓存,   
  32.         // 以至这个包准备好了就发;   
  33.         pool.setNagle(false);   
  34.         // 连接建立后对超时的控制   
  35.         pool.setSocketTO(3000);   
  36.         // 初始化一些值并与MemcachedServer段建立连接   
  37.         pool.initialize();   
  38.   
  39.         // 开启压缩功能   
  40.         mcc.setCompressEnable(true);   
  41.         // 大于64K开始压缩   
  42.         mcc.setCompressThreshold(64 * 1024);   
  43.     }   
  44.   
  45.     public static void bulidCache() {   
  46.         // set(key,value,Date) ,Date是一个过期时间,如果想让这个过期时间生效的话,这里传递的new Date(long   
  47.         // date) 中参数date,需要是个大于或等于1000的值。   
  48.         // 因为java client的实现源码里是这样实现的 expiry.getTime() / 1000 ,也就是说,如果   
  49.         // 小于1000的值,除以1000以后都是0,即永不过期   
  50.         mcc.set(“test”“This is a test String”new Date(10000)); // 十秒后过期   
  51.   
  52.     }   
  53.   
  54.     public static void output() {   
  55.         // 从cache里取值   
  56.         String value = (String) mcc.get(“test”);   
  57.         System.out.println(value);   
  58.     }   
  59.   
  60.     public static void main(String[] args) {   
  61.         bulidCache();   
  62.         output();   
  63.     }   
  64.   
  65. }