Memcached是什么?
Memcached是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。
Memcached能缓存什么?
通过在内存里维护一个统一的巨大的hash表,Memcached能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。
Memcached快么?
非常快。Memcached使用了libevent(如果可以的话,在linux下使用epoll)来均衡任何数量的打开链接,使用非阻塞的网络I/O,对内部对象实现引用计数(因此,针对多样的客户端,对象可以处在多样的状态), 使用自己的页块分配器和哈希表, 因此虚拟内存不会产生碎片并且虚拟内存分配的时间复杂度可以保证为O(1).。
Danga Interactive为提升Danga Interactive的速度研发了Memcached。目前,LiveJournal.com每天已经在向一百万用户提供多达两千万次的页面访问。而这些,是由一个由web服务器和数据库服务器组成的集群完成的。Memcached几乎完全放弃了任何数据都从数据库读取的方式,同时,它还缩短了用户查看页面的速度、更好的资源分配方式,以及Memcache失效时对数据库的访问速度。
Memcached的特点
Memcached的缓存是一种分布式的,可以让不同主机上的多个用户同时访问, 因此解决了共享内存只能单机应用的局限,更不会出现使用数据库做类似事情的时候,磁盘开销和阻塞的发生。
在Windows下相比用VC,MinGW进行编译,用cygwin编译需要修改的地方较少,这里详细记录一下:
采用http://blog.nyarla.net/2010/08/14/1的方法,
大概步骤如下:
--------------------------
1. 安装cygwin
http://www.cygwin.com/下载在线安装程序。
双击setup.exe,选择Install from Internet,
(如果之前已经装过而且没删缓存文件,
可以选择Install from Local Directory)
Select Packages在Search中分别搜索以下项目:
gcc(包括gcc-core,gcc-g++)
make
wget
选中(一般Bin列出现x就可以了,不需要装Src)后按下一步安装。
在cygwin命令行下输入以下命令确定是否装好:
make --version
gcc --version
wget --version
tar --version
--------------------------
2. 编译libevent
cd
wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz
cd
wget http://monkey.org/~provos/libevent-1.4.14b-stable.tar.gz
这里也可以到两个包的官网下载gz的包,在通过tar解包。
tar zxvf libevent-1.4.14b-stable.tar.gz
cd libevent-1.4.14b-stable
./configure --prefix=/usr/local/libevent
make clean all
make install
--------------------------
3. 给memcached1.4.5打补丁
cd
tar zxvf memcached-1.4.5.tar.gz
cd memcached-1.4.5
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
make
出现错误:
util.c: In function `safe_strtoull':
util.c:19: warning: array subscript has type `char'
util.c: In function `safe_strtoll':
util.c:42: warning: array subscript has type `char'
util.c: In function `safe_strtoul':
util.c:62: warning: array subscript has type `char'
util.c: In function `safe_strtol':
util.c:86: warning: array subscript has type `char'
用IE打开
http://github.com/lindner/memcached/blob/master/util.c
点击右上角raw下载修改好的util.c
http://github.com/lindner/memcached/raw/master/util.c
然后覆盖到memcached-1.4.5目录下
explorer .
继续执行make
出现另一个错误
testapp.c: In function `cache_redzone_test':
testapp.c:125: error: unknown field `sa_handler' specified in initializer
testapp.c:125: warning: missing braces around initializer
testapp.c:125: warning: (near initialization for `action.<anonymous>')
打开testapp.c把125行代码
struct sigaction action = { .sa_handler = SIG_IGN, .sa_flags = 0};
改为
struct sigaction action;
action.sa_handler = SIG_IGN;
action.sa_flags = 0;
然后继续执行
make
确保11211端口没有被占用,然后执行:
make test
出现错误
prove ./t
make: prove: Command not found
可以把Makefile
prove $(srcdir)/t
改为
-prove $(srcdir)/t
以忽略此错误
(补注:prove程序可以在perl的安装包找到,
由于版本问题可能无法运行此命令,
要在windows运行prove可以下载最新版的ActivePerl的社区版,
更新到cygwin或msys的目录下)
然后执行:
make install
执行
./memcached.exe
启动memcached监听端口
-----------------------------
memcached服务器版本不同会影响一些功能,
例如:超时时间的单位;是否支持cas;是否支持64位;是否支持多线程;等等
所以最好参考官网的资料和考虑实际情况。
另外,memcached的服务器端与客户端是完全两回事(比方说memcached的c客户端库的编译要使用pthread库,而服务器端的1.2版貌似可以不使用pthread库;实现使用的算法不同;各种编程语言的memcached客户端所实现的功能也千差万别)
三、使用MinGW编译
可以参考http://trondn.blogspot.com/2010/03/building-memcached-windows.html(此链接需要FQ而过)的方法编译。里面有32位和64位两种方式的编译。
四:.NET的调用库
通过这个链接https://sourceforge.net/projects/memcacheddotnet/下载,包里面有.NET 1.1和2.0两个版本的工程。
这个包里面采用的接口命令是文本方式的,文本方式接口说明参考:http://blog.chinaunix.net/u1/45336/showart_2227790.html。
如果自己感觉自身开发牛叉建议改成二进制方式,效率会提高,二进制方式接口说明参考:http://code.google.com/p/memcached/wiki/BinaryProtocolRevamped