日期:2014-05-17  浏览次数:20883 次

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的实例代码

import com.meetup.memcached.MemcachedClient;
import com.meetup.memcached.SockIOPool;
import java.util.Date;

public class Test {

	protected static MemcachedClient mcc = new MemcachedClient();
	static {
		String[] servers = { "127.0.0.1:11211" };
		Integer[] weights = { 3 };

		// 创建一个实例对象SocketIOPool
		SockIOPool pool = SockIOPool.getInstance();

		// 设置Memcached Server
		pool.setServers(servers);
		// 设置Memcached权重
		pool.setWeights(weights);

		// 初始化5个连接
		pool.setInitConn(5);
		// 最小5个连接
		pool.setMinConn(5);
		// 最大250个连接
		pool.setMaxConn(250);
		// 一个连接最大句柄时间为6小时
		pool.setMaxIdle(1000 * 60 * 60 * 6);
		// 设置休眠以维持线程,它每30秒苏醒以此维护池大小
		pool.setMaintSleep(30);
		// Tcp的规则就是在发送一个包之前,本地机器会等待远程主机
		// 对上一次发送的包的确认信息到来;这个方法就可以关闭套接字的缓存,
		// 以至这个包准备好了就发;
		pool.setNagle(false);
		// 连接建立后对超时的控制
		pool.setSocketTO(3000);
		// 初始化一些值并与MemcachedServer段建立连接
		pool.initialize();

		// 开启压缩功能
		mcc.setCompressEnable(true);
		// 大于64K开始压缩
		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();
	}

}

?

?