惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 阿修

Entity FrameWork 单表对多实体 让Entity Framework启动不再效验__MigrationHistory表 Entity Framework搜索指定字段解决方案 Linux+Mono+WebService:CS1703: An assembly with the same identity--mscorlib 获取某年中第几个礼拜的第一天的函数 DataTable.Rows.Remove(row) 与 DataTable.Rows[i].Delete()区别 [转摘]Lucene学习总结之一:全文检索的基本原理 Lucene.net根据Sort走到了不同的类处理 VPN Connections and Default Gateways - 阿修 牛!帮EXE等执行文件压缩的工具 进程通讯的多种方式 三星I9008删除程序清单 .NET编程中的部分效率问题 质量保证漫漫谈之QA、QC、QM的关系与区别 - 阿修 敏捷宣言 多维角度聊聊结对编程 Serv-U服务器中文乱码问题的解决 请小心 管理学中四件不要做的事情 - 阿修
在Windows下编译和.NET运行MemCached
阿修 · 2010-11-26 · via 博客园 - 阿修

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