【问题标题】:How to cache database reads in Azure roles?如何在 Azure 角色中缓存数据库读取?
【发布时间】:2012-01-13 03:17:09
【问题描述】:

在我的 Azure 角色中,我有很多实体必须存储在 SQL Azure 数据库中。目前,每当我需要读取实体时,我只需运行 SQL Azure 查询。

我怀疑它很快就会成为瓶颈,所以我必须实现某种缓存 - 一些内存结构,在第一次访问时读取数据,然后将其存储一段时间,并在后续读取时返回缓存数据。制作这样的结构应该不难,我相信我可以找到现成的代码。

问题是我如何处理来自多个实例的写入?例如,实例 1 读取数据并缓存,实例 2 更改数据库。除非实例 1 知道它必须重新读取数据库并且实际上重新读取了数据库,否则它会使用错误的数据。我不知道如何轻松做到这一点。

有没有一种简单的方法来保持不同实例的缓存一致?

【问题讨论】:

    标签: c# .net sql-server caching azure


    【解决方案1】:

    这是分布式缓存发挥作用的地方,在 Azure 上这通常意味着 Windows Azure AppFabric Caching

    分布式缓存背后的想法是缓存是集中式的,并且可能分布在多个服务器上(为了提高效率),这样数据请求就不必转到数据库,这在性能方面通常相对昂贵,但同样,这些数据不必在每个进程中本地缓存。

    虽然显然不如进程内缓存高效,但分布式缓存有几个好处 -

    1. 它确实可以防止对底层源的多次调用
    2. 由于缓存不在进程中(实际上,在不同的服务器上),它减少了本地内存的压力
    3. 客户端从彼此的获取中受益 - 即,如果一个客户端将数据带入缓存,安全设置允许,其他客户端现在可以访问此信息,因此缓存的利用率可以更高

    这也意味着更新了“真相”知识的客户端可以更新缓存或确实使其无效,这将立即使共享同一缓存的所有其他客户端受益。

    另外 - 作为一个分布式模型 - 缓存场可以扩展以满足许多请求,尽管在 Azure 上 - 由于缓存是作为服务提供的,这是平台而不是所有者负责的事情,这是PaaS 和 Windows Azure 的一大优势 信息到缓存

    【讨论】:

      【解决方案2】:

      你可以像 Yossi 所说的那样使用 AppFabric 缓存,但你也可以使用Memcached

      【讨论】:

        【解决方案3】:

        如果要使用 Azure AppFabric 缓存并且希望数据保持一致,则可能需要关闭本地缓存。

        缺点是,如果每次请求从缓存中提取多个项目,这将是一个主要瓶颈。您可以尝试通过将缓存对象组合成一个大对象来解决此问题。

        posted a question 在 Microsoft 论坛上谈到了这一点,目前的答案是,如果需要本地缓存,陈旧数据只是可以忍受的东西。

        附带说明,如果需要本地缓存并且您正在使用 Web 角色,那么普通的旧 ASP.Net 缓存可能是更好的选择,并且不会单独收费。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-12-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-05
          • 2019-11-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多