Windows和.NET的Memcached


83

在Windows环境中,已经有人实现了供生产使用的memcached吗?因为我已经读过许多博客,所以不建议在Windows中特别是出于生产目的在Windows中运行memcached,例如在Windows上运行memcached

还有一件事情,哪个与C#和.net 3.5一起使用的memcached客户端很好?我发现了许多替代方案,例如Memcached Providers @ CodeplexBeitmemcachedmemcached Provider @ Sourceforge


6
您指向的是2008年博客文章。Memcached最近在Windows上变得非常友好: northscale.com
Dustin

1
+1达斯汀。我们一直在使用NorthScale,并且对Windows友好,并具有良好的管理(网络)UI
ram 2010年

2
@Dustin和@ram-Dustin,请尽情享受+1,但这个问题是在2008
Justin 2010年

3
嘿。那一定是那个'08。对于那个很抱歉。:)
达斯汀

Answers:


49

为什么需要在Windows上运行memcached?在生产环境中这是一件昂贵的事情。

如果您的代码需要在Windows环境中运行,请获取Windows Memcached客户端并与基于* nix的Memcached机器对话。

在生产环境中,在Server 2003或2008上运行memcached意味着您将获得所有这些许可证。Linux将为您提供所有OSS优势。Windows上的内存缓存使TCO呈线性上升

编辑:

自从我写这个答案已经有1.5年了,此后许多事情都发生了变化。您必须要注意,特别是当类似达斯汀的人发表评论时。
因此,这就是在运行的Windows上获取memcached的方法。从Couchbase(以前称为Northscale)下载适用于Windows的memcached
通常,如果您打算在同一台生产计算机上运行memcached,则希望在有限的内存中启动它,即定义允许使用memcached的最大内存。

c:\ Program Files \ memcached> memcached.exe -m 128。

在这里,memcached的最大使用量为128 mb。您不希望memcached占用Web服务器上的所有内存。

在您决定扩展内存缓存的那一刻,您需要考虑我之前所说的内容。此外,压缩键值组合中的值。Web服务器通常只消耗很少的CPU使用率(2-3%),与CPU使用率相比,压缩为整个网络带来了很多价值。如果您过于担心常规压缩,请尝试使用LZO


2
感谢您的回答,这就是我要的。
Funky81

31
在Windows上,TCO如何成倍增加?许可成本随机器数量线性增加。但是坦率地说,考虑到硬件成本,机架空间和电力,支持合同以及运营商的薪水,Windows的许可成本微不足道。
格雷格·比奇

23
只是为了反驳Cherian的论点。希望在Windows中托管的一个驱动因素可能是sysadmin专业知识。例如,那些没有资源雇用* nix管理员只是为了调出内存缓存盒的小型商店,可以通过在公司已经精通的平台(例如Windows)上托管而受益匪浅。
乔尔·马丁内斯

2
我会DV这个答案,因为它实际上并没有解决OP所要求的任何问题,但是他说这正是他所要的。
克里斯·马里西奇

11
拒绝投票,因为它没有解决实际的问题。如果它解决了OP的问题,也许应该重写该问题?
sh-beta 2010年

21

我很惊讶这里还没有人提到Redis-它是功能最丰富,速度最快(在入门级Linux机器上为每秒110,000个SET)的键值数据存储库之一,它具有对字符串的丰富数据结构支持,集,列表,排序集和哈希。

尽管Windows不是官方支持的平台,但它在所有测试通过的情况下都能在Windows下完美运行。我在这里有可用的Windows版本(使用Cygwin):https : //github.com/ServiceStack/ServiceStack.Redis#redis-server-builds-for-windows

它还具有当今几乎所有使用的编程语言的客户端绑定。我维护了一个丰富的开源C#Redis客户端,该客户端具有对任何C#POCO类型,事务支持和线程安全客户端管理器的本机API支持,可以随时通过以下网址将它们放入任何IOC中:https : //github.com/ServiceStack/ServiceStack。雷迪斯


12

由于当时还不存在Velocity,因此我为我工作的公司Skiviez使用了Windows的内存缓存端口。它主要仅用于为同一台计算机上的多个工作进程提供集中式缓存。现在,在一个电子商务网站上,它的使用情况正常(约18,500次点击/天),运行良好大约18个月。我使用的客户端被Enyim集成为iBATIS.NET的缓存提供程序。那位客户似乎工作得很好;内存缓存的客户端也不是很复杂。

如果我不得不再次这样做,那么如果我致力于在Windows上使用我的分布式缓存解决方案,那么我可能会考虑使用Velocity。但是它现在正在工作,所以我不会去碰它。

(此外:从那时起,我通过将某些Cache*列添加到数据库中的关键表中来消除对缓存的大部分需求,这些列由每晚计划的任务进行更新。这从一开始就减轻了对整个资源的压力通过将缓存的结果保留在memcached中来查询数据库,从而对数据库的可用性造成了后续压力,从而缩短了CPU时间,并且在访问缓存的数据版本时与在计算时相比,这在代码中更加明确飞行版本。我敢肯定您有很多使用分布式缓存的理由,但是退后一步并质疑您是否真的需要它总是值得一试的!)


Velocity现在是AppFabric的一部分
Jon

7

我不知道您正在处理的项目是什么,但是您可能想看一下Microsoft Velocity项目

“ Velocity”是一个分布式内存应用程序缓存平台,用于开发可扩展的高性能应用程序。“速度”可用于缓存任何公共语言运行时(CLR)对象,并提供通过简单API的访问。“速度”的关键方面是分布式缓存的性能,可扩展性和可用性。

我看过几个演示程序,看起来它与.net框架具有很好的集成。

客户端API的问题在于,您仍然必须使用LAMP堆栈在另一个位置的另一个盒子上运行memcached实例,正如您所指出的那样。使用速度意味着您仍将在同一堆栈上运行,并且整个.net平台之间的集成更加紧密。

话虽如此,如果您想使用Velocity作为其他.net应用程序的缓存,您可能会发现自己不得不编写自己的API来公开Velocity数据以供使用。


据我所知,速度仍在发展中,这就是为什么我尝试寻找其他替代品的原因。那就是memcached
Funky81'8

经过一段时间的阅读之后,memcached的安装和维护速度并不容易
Funky81

3
使用LAMP堆栈?您的意思不是“使用Linux”,因为您不需要Apache,MySQL或PHP来运行memcached。
GateKiller

6

速度在管理方面涉及更多,但远比内存缓存强大得多。我不是反内存缓存的,至少没有,这很棒。但是,展望未来,纯基于.NET的新项目很疯狂,即使在目前未发布的状态下也无法利用Velocity。


6

看一下SharedCache。其开源,易于使用且非常可靠。

高性能,分布式内存对象缓存系统,本质上是通用的,但旨在通过减轻数据库负载来加速动态Web和/或赢得应用程序。不要忘记访问我们的网站http://www.sharedcache.com


3

客户端API的问题在于,您仍然必须使用LAMP堆栈在另一个位置的另一个盒子上运行memcached实例,正如您所指出的那样。

完全不对。运行Memcached不需要LAMP(Linux,Apache,MySQL,PHP)堆栈。我现在更喜欢使用内存缓存而不是使用速度,直到速度超出CTP为止。我玩了一段时间,但感觉太笨拙了。我遵循了整个KISS的原则,要保持简单。最简单的就是缓存... Get(键)... Put(键,值)... Destroy(键)。



1

我知道我在这里参加聚会有点晚了,而且已经有了很多好的答案。

我们已在Windows Server上成功使用Membase。它与Memcached 100%兼容,并具有出色的GUI安装程序和Web配置服务器。这非常容易管理。

还包括其他NoSQL功能,这些功能不在此线程的讨论范围内,但是值得一看。他们确实具有开发,测试和(有限)生产服务器的免费许可证。

Membase下载

如果您不希望Membase中有任何其他功能,则该页面仅具有Windows版的Memcached安装。



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.