使用 Windows 和 .NET 进行 Memcached

Posted

技术标签:

【中文标题】使用 Windows 和 .NET 进行 Memcached【英文标题】:Memcached with Windows and .NET 【发布时间】:2010-09-25 23:35:46 【问题描述】:

是否有人已经在 Windows 环境中实现了 memcached 以供生产使用? 因为看了很多博客,不建议在 Windows 中运行 memcached 尤其是生产使用,例如running memcached on windows。

还有一件事,哪个 memcached 客户端适合与 c# 和 .net 3.5 一起使用? 我发现了很多替代品,例如 Memcached Providers @ Codeplex、Beitmemcached 和 memcached provider @ Sourceforge

【问题讨论】:

您指向的是 2008 年的一篇博文。 Memcached 最近在 Windows 上变得非常友好:northscale.com +1 给达斯汀。我们一直在使用 NorthScale,它对 Windows 非常友好,具有漂亮的管理(Web)用户界面 @Dustin 和 @ram - Dustin,享受你的 +1,但这个问题是在 2008 年提出的。 嘿。那一定是08年的样子。对于那个很抱歉。 :) 【参考方案1】:

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

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

在 Server 2003 或 2008 上运行 memcached 的生产环境中,意味着您可以获得所有这些设备的许可证。 Linux 将为您提供所有 OSS 的好处。 TCO 将随着 Windows 上的 memcached 线性上升

编辑:

我写这个答案已经有 1.5 年了,从那以后很多事情都发生了变化。你必须注意,尤其是像达斯汀这样的人。 所以这里是你如何在 Windows 运行时获取 memcached。 Download memcached for windows from Couchbase (formerly Northscale). 通常,如果您计划在同一台生产机器上运行 memcached,您会希望在有限的内存中启动它,即定义 memcached 允许使用的最大内存。

c:\程序 文件\memcached>memcached.exe -m 128.

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

当您决定scale out memcached 时,您需要考虑我之前所说的话。此外,在键值组合中压缩您的值。 Web 服务器通常消耗很少的 CPU (2-3%) 使用率,与 CPU 使用率相比,压缩为整个网络带来了很多价值。如果你太在意正常压缩,试试LZO

【讨论】:

感谢您的回答,这就是我要找的。​​span> TCO 如何在 Windows 上呈指数增长?许可成本随着机器数量的增加呈线性增长。但是当你考虑到硬件成本、机架空间和电力、支持合同和运营商工资时,坦率地说,Windows 的许可成本是微不足道的。 只是为了反驳 Cherian 的论点。想要在 Windows 中托管的一个驱动因素可能是系统管理员的专业知识。例如,没有资源聘请 *nix 管理员来启动 memcached 盒子的小型商店可以从托管在公司已经精通的平台(即 Windows)中受益匪浅。跨度> 我会 DV 这个答案,因为它确实没有解决 OP 提出的任何问题,但他说这正是他想要的。 投反对票,因为它没有解决实际问题。如果它解决了OP的问题,也许应该重写问题?【参考方案2】:

我很惊讶这里还没有人提到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.Redis

【讨论】:

【参考方案3】:

请按照下面提到的链接查看此问题的解决方案。

我可以在 Windows 环境中实现 memcached 以供生产使用。

http://www.codeproject.com/Articles/96698/Implementing-Distributed-Caching-using-Memcachedhttp://www.deanhume.com/Home/BlogPost/object-caching----net-4/37 http://latebound.blogspot.com/2008/10/using-memcached-from-c.html

【讨论】:

【参考方案4】:

由于当时还没有 Velocity,我为我工作的公司 Skiviez 使用了一个到 Windows 的 memcached 端口。它的存在主要只是为同一台机器上的多个工作进程提供一个集中的缓存。它在一个使用量不大的电子商务网站上已经运行了大约 18 个月(约 18,500 次点击/天)。我使用的客户端是 Enyim 集成为 iBATIS.NET 的缓存提供程序。那个客户似乎工作得很好; memcached 客户端一开始也不是很复杂。

如果我必须再做一次,如果我致力于保留在 Windows 上的分布式缓存解决方案,我可能会考虑 Velocity。但它现在正在工作,所以我不会去碰它。

(旁白:从那时起,我通过向数据库中的关键表添加某些 Cache* 列来消除对缓存的大部分需求,这些表由计划任务每​​天晚上更新。这最终减少了对资源的压力从最初通过查询数据库对 CPU 时间造成的影响,到通过将缓存结果保存在 memcached 中而对内存可用性造成的后续压力。当访问数据的缓存版本时,它在代码中也更加明确与即时计算的版本相比。我相信你有很多理由使用分布式缓存,但总是值得一试,退后一步,质疑你是否真的需要它!)

【讨论】:

Velocity 现在是 AppFabric 的一部分【参考方案5】:

如果您有兴趣在 Windows 上运行 memcached 客户端,那么还有两个额外的开源服务器可以完成这项工作。两者都实现了标准的 memcached 服务器协议,并且都是用 Java 编写的,因此它们可以在 Windows 上运行。

jmemcached quickcached

【讨论】:

【参考方案6】:

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

我们在 Windows Server 上使用 Membase 取得了巨大成功。它与 Memcached 100% 兼容,并且有一个不错的 GUI 安装程序和 Web 配置服务器构建它。它非常易于管理。

还包括其他 NoSQL 功能,这些功能超出了本线程的范围,但值得一看。他们确实拥有开发、测试和(有限)生产服务器的免费许可。

Membase Downloads

如果您不想要 Membase 中的任何额外功能,则同一页面仅适用于 Memcached 的 Windows 安装。

【讨论】:

【参考方案7】:

作为上文提到的 Velocity 的附录,this was released by Microsoft as part of AppFabric。 More details here.

Check out the various questions involving AppFabric and Cache here on ***.

【讨论】:

【参考方案8】:

看看SharedCache。它是开源的,易于使用且非常可靠。

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

【讨论】:

【参考方案9】:

客户端 API 的问题在于,您仍然必须使用 LAMP 堆栈在另一个盒子上运行一个 memcached 实例,最好是您已经注意到的。

完全不正确。运行 Memcached 不需要 LAMP(Linux、Apache、mysqlphp)堆栈。我目前更喜欢 memcached 而不是速度,直到速度超出 CTP。我已经玩了一段时间的速度,但发现它太笨拙了。我遵循整个 KISS 的事情,你知道...保持简单。没有比缓存更简单的了... Get(key)... Put(key, value)... Destroy(Key)。

【讨论】:

【参考方案10】:

Velocity 管理起来有点复杂,但它比 memcached 强大得多。我不是反memcached,一点也没有,这很棒。但展望未来,纯基于 .NET 的新项目会疯狂地不利用 Velocity,即使在其当前未发布状态下也是如此。

【讨论】:

【参考方案11】:

我不知道你在做什么项目,但你可能想看看Microsoft Velocity project 从页面:

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

我看过几个演示,看起来它与 .net 框架的集成非常好。

客户端 API 的问题是,您仍然必须使用 LAMP 堆栈在另一个盒子上运行一个 memcached 实例,最好是您已经注意到的某个地方。使用速度意味着您仍将在同一个堆栈上运行,并且跨 .net 平台的集成更加紧密。

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

【讨论】:

据我所知,velocity 仍在开发中,这就是我尝试寻找其他替代品的原因。那就是 memcached 看了一会儿,velocity的安装和维护并不像memcached那么容易 使用 LAMP 堆栈?你不是说“使用 Linux”吗,因为你不需要 Apache、MySQL 或 PHP 来运行 memcached。

以上是关于使用 Windows 和 .NET 进行 Memcached的主要内容,如果未能解决你的问题,请参考以下文章

用工厂模式解决ASP.NET Core中依赖注入的一个烦恼

memacahe在windows上的应用

ruby 使用memcache获取响应。来自https://devcenter.heroku.com/articles/building-a-rails-3-application-with-memc

Windows下配置使用MemCached

memcache安装以及php_memcache.dll 扩展安装

为啥要使用托管(C# 和 .NET)或本机代码进行 Windows API 开发?