C# 如何在Azure角色中缓存数据库读取?

C# 如何在Azure角色中缓存数据库读取?,c#,.net,sql-server,caching,azure,C#,.net,Sql Server,Caching,Azure,在我的Azure角色中,我有许多实体必须存储在SQLAzure数据库中。目前,每当我需要读取一个实体时,我只运行一个SQLAzure查询 我怀疑它很快就会成为一个瓶颈,所以我必须实现某种缓存——某种内存结构,在第一次访问时读取数据,然后将其存储一段时间,并在后续读取时返回缓存数据。制作这样的结构应该不难,我相信我可以找到现成的代码 问题是如何处理来自多个实例的写入?例如,实例1读取并缓存数据,实例2更改数据库。除非实例1知道它必须重新读取数据库并实际重新读取数据库,否则它将使用错误的数据。我不知

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

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

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


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

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

分布式缓存背后的思想是,缓存是集中的,并且可能分布在多个服务器上(为了提高效率),这样,数据请求就不必进入数据库,而数据库的性能通常比较昂贵,但同样地,数据也不必在每个进程中本地缓存

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

  • 它确实可以防止对底层源的多次调用
  • 由于缓存在进程外(事实上,在另一台服务器上),它减轻了本地内存的压力
  • 客户机从彼此的获取中受益-即,如果一个客户机在安全设置允许的情况下将数据带入缓存,那么其他客户机现在可以访问此信息,从而提高缓存的利用率
  • 这也意味着拥有“真相”更新知识的客户端可以更新缓存或使其失效,这将立即使共享同一缓存的所有其他客户端受益

    此外,作为一种分布式模型,缓存场可以扩展以满足许多请求,尽管在Azure上,但由于缓存是作为一项服务提供的,这是平台所关心的,而不是所有者,这是PaaS和Windows Azure的一大好处
    缓存的信息

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

    分布式缓存背后的思想是,缓存是集中的,并且可能分布在多个服务器上(为了提高效率),这样,数据请求就不必进入数据库,而数据库的性能通常比较昂贵,但同样地,数据也不必在每个进程中本地缓存

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

  • 它确实可以防止对底层源的多次调用
  • 由于缓存在进程外(事实上,在另一台服务器上),它减轻了本地内存的压力
  • 客户机从彼此的获取中受益-即,如果一个客户机在安全设置允许的情况下将数据带入缓存,那么其他客户机现在可以访问此信息,从而提高缓存的利用率
  • 这也意味着拥有“真相”更新知识的客户端可以更新缓存或使其失效,这将立即使共享同一缓存的所有其他客户端受益

    此外,作为一种分布式模型,缓存场可以扩展以满足许多请求,尽管在Azure上,但由于缓存是作为一项服务提供的,这是平台所关心的,而不是所有者,这是PaaS和Windows Azure的一大好处
    缓存中的信息

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

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

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

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

    我在微软论坛上谈到了这一点,现在的答案是,如果需要本地缓存,过时的数据只是一种生活方式


    另一方面,如果需要本地缓存,并且您使用的是web角色,那么简单的旧ASP.Net缓存可能是更好的选择,并且不需要单独付费。

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

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

    我在微软论坛上谈到了这一点,现在的答案是,如果需要本地缓存,过时的数据只是一种生活方式

    另一方面,如果需要本地缓存,并且您使用的是web角色,那么普通的ASP.Net缓存可能是更好的选择,并且不需要单独付费