日期:2014-05-17 浏览次数:20883 次
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(); } }
?
?