代码之家  ›  专栏  ›  技术社区  ›  ESV Alconja

system.web.caching与企业库缓存块

  •  29
  • ESV Alconja  · 技术社区  · 16 年前

    对于将在Web应用程序和富客户端应用程序中使用的.NET组件,似乎有两个明显的缓存选项:system.web.caching或ent。解放军。缓存块。

    • 你用什么?
    • 为什么?

    System.Web.Caching

    在Web应用程序之外使用是否安全?我看到了各种各样的信息,但我认为答案可能不是真的。

    我不想用它的亮点之一, SqlCacheDependency 但是增加了 CacheItemUpdateCallback 在.NET 3.5中似乎是一件很好的事情。

    Enterprise Library Caching Application Block

    • 其他块已在使用中,因此依赖项已存在
    • 不需要缓存持久性;重新启动时重新生成缓存可以

    某些缓存项应始终可用,但应定期刷新。对于这些项目,获取回调 之后 一件物品被移走不是很方便。看起来客户机只需要睡眠和轮询,直到重新填充缓存项。

    Memcached for Win32 + .NET client

    当你不需要 分布式的 隐藏物?

    4 回复  |  直到 11 年前
        1
  •  18
  •   Andrew Siemer    11 年前

    以下是我在缓存主题中考虑的项目:

    MimcLink Win32 速度 .NET缓存 企业库缓存应用程序块

    memcached win32(内存缓存Win32): 直到最近我才使用memcached win32。这类似于Web场(许多服务器为高可用性提供相同的内容),但它是一个缓存场。这意味着,如果您没有足够的资源,可以在Web服务器上本地安装它。然后,当您沿着这条路走下去时,您可以水平(更多服务器)或垂直(更多硬件)缩放。这是一个从原始memcached移植到Windows上的产品。该产品已广泛应用于交通流量非常大的站点。 http://lineofthought.com/tools/memcached

    速度: 这是微软对memcached等产品的回应。Memcached已经退出一段时间了,Velocity处于CTP模式。我必须说,根据我迄今为止所读到的内容,这款产品一旦上市,肯定会让我大吃一惊。但我不能让自己在一个零记录的CTP产品上运行大型生产项目。我已经开始玩它了,尽管一旦它获得了动力,Memcached甚至无法与那些锁定在Windows世界中的人相比! http://blogs.msdn.com/velocity/

    .NET缓存: 没有理由对标准.NET缓存进行折扣。它是内置的,可以免费使用,不需要(主要)设置。它通过提供在本地内存、单状态服务器或集中数据库中存储项目的机制来提供灵活性。当您需要一个以上的状态服务器(内存中的缓存)并且不想使用一个较慢的数据库来保存您的缓存时,可以使用Velocity。

    企业应用程序块: 我远离所有的企业应用程序块。它们是比我通常需要的更多的重型框架!只要你记得包装所有接触到的代码不是你自己的,并遵循简单的编码规则,坚持其他任何方法超过这一个!(当然只有我的观点——MySpace尽可能多地利用企业应用程序块之外的资源!)

    你不必预先选择! 我通常会创建一个缓存包装器,在代码中与之通信,以获取、设置、存在、移除、列表键等方法。然后,这会指向一个底层缓存抽象层,该抽象层可以指向memcached、velocity或.NET缓存。我使用structuremap(或选择另一个IOC容器)来注入要用于给定环境的缓存形式。在本地dev框中,我可能会在会话中使用.NET缓存。在生产中,我通常使用memcached win 32。但是不管它是如何设置的,你都可以很容易地交换东西来尝试每个系统,看看什么对你最有效。您只需要确保您的应用程序尽可能少地了解缓存的方式!一旦这个抽象层就位,您就可以做一些事情,比如对进入和离开缓存的所有数据运行压缩算法(gzip),这将允许您在缓存中存储10倍的数据量。- 透明地 .

    如果您感兴趣的话,我会在我的书中介绍.NET缓存、memcached win32、structuremap和适当的抽象。

    ASP.NET 3.5社交网络( http://www.amazon.com/ASP-NET-3-5-Social-Networking-Enterprise-ready/dp/1847194788/ref=sr_1_1?ie=UTF8&s=books&qid=1225408005&sr=8-1 ) Andrew Siemer www.andrew siemer.com博客.andrew siemer.com www.socialnetworkingin.net

    更新 已更改使用memcached列出网站的链接。谢谢你,大卫注意到它坏了!

        2
  •  3
  •   PhilPursglove    16 年前

    请记住,Entlib文档专门指导您使用ASP.NET应用程序的ASP.NET缓存。这可能是在这里使用它的最有力的建议。另外,entlib缓存没有依赖项,这对我来说是不使用它的一个重要原因。

    我认为作为你应用程序的一部分,Shipping System.Web没有技术限制,尽管他们把通知放在.NET 3.5页面上有点奇怪。汉塞尔曼实际上说,他开始被这个想法吓坏了,但后来被说服了。另外,如果您阅读注释,他说块中有太多的移动部件,而且ASP.NET缓存更轻。
    我认为这正是那种 Velocity 将要解决,但这只是目前的预览:-(

    我会说使用web.caching,看看你是怎么上的。如果您在它的顶部放置了某种抽象层,那么以后如果发现问题,您总是可以选择将它换成entlib块。

        3
  •  2
  •   Mike Stone    16 年前

    看一看 memcached . 它是一个非常酷、快速、轻量级的分布式缓存系统。有几种最流行的语言的API,包括C。它在客户机端可能不能很好地工作(当然,除非客户机从某种类型的服务器获取缓存数据),但是如果您将memcached的使用抽象到特定的接口,那么您就可以实现与另一个缓存系统的接口。

        4
  •  -2
  •   Andrew Harry    16 年前

    @ Davide Vosti

    “如果他们把它放在Web名称空间中,我认为这是一个很好的理由。” 这个逻辑同样适用于Robotic Studio中的并发和协调运行时(CCR)吗?不?我不这么认为。