【问题标题】:Is a Session-Based Cache Solution Viable?基于会话的缓存解决方案可行吗?
【发布时间】:2009-07-24 02:56:59
【问题描述】:

我想知道将缓存项目存储在 Session 变量中是否可行,而不是创建基于文件的缓存解决方案?因为它是每个用户一次,所以如果用户访问多个页面,它可以减少对数据库的一些额外调用。但值得付出努力吗?

【问题讨论】:

  • 你在说什么语言/平台?

标签: php session caching


【解决方案1】:

如果你正在缓存的数据(愿意缓存)不依赖于用户,你为什么要存储在会话中......它附加到用户?

考虑到会话通常存储在文件中,与自己使用文件相比,它不会优化任何东西。

如果站点上有 10 个用户,缓存中的相同数据将是 10 倍?我不认为这是缓存东西的最佳方式;-)

对于所有用户都相同的数据,我真的会采用另一种解决方案,无论是否基于文件(即使对于特定于一个用户或一组用户的数据,我也可能不会将其存储在会话——除非非常小,也许)

有些东西你可以看看:

  • 几乎每个框架都提供某种缓存机制。例如 :
  • 您可以使用大量后端存储缓存数据;例如 :
    • 文件
    • 共享内存(例如使用 APC 之类的东西)
    • 如果您有多个服务器和大量数据,memcached
    • (一些框架提供类来处理这些类;从一个切换到另一个甚至可以像在配置文件中更改几行一样简单^^)

下一个问题是:你需要缓存什么?多长时间 ?但这是另一个问题,只有你能回答;-)

【讨论】:

    【解决方案2】:

    可以,但这在很大程度上取决于您要缓存的内容以及其他一些情况。

    • 信息可能会改变吗?
    • 显示稍微过时的信息会不会有问题?
    • 查询对数据库施加的负载有多大?
    • 数据库服务器的延迟是多少? (在本地网络上应该不是问题)
    • 应该按每个用户缓存信息,还是针对整个应用程序全局缓存信息?
    • 涉及的数据量

    在某些情况下,性能提升可能很重要。在我工作过的特定 ASP.NET / SQL Server 站点上,添加一个简单的缓存机制(在应用程序级别)将 Web 服务器上的 CPU 负载减少了 3 倍(!),同时防止了一大堆访问某个表时出现的数据库超时问题。

    自从我在 PHP 中做任何严肃的事情以来已经有一段时间了,但我认为您唯一的选择是在会话级别执行此操作。然而,我上面的大多数考虑仍然有效。至于努力;假设您的代码结构充分,实施起来应该花费很少的精力。

    【讨论】:

      【解决方案3】:

      Session 应该只严格用于用户特定的数据。如果您使用它来缓存应该在多个会话中通用的内容,那么您将不必要地复制大量数据。为什么不直接使用 ASP.NET 附带的缓存(如果您关心数据库往返,您可以使用 inProcess,而不是 SQL,因为您将在内存中存储缓存数据)

      【讨论】:

      • 很可能是这样,但它在哪里说这是关于 ASP.NET 的? :)
      猜你喜欢
      • 2021-04-11
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      • 2011-03-01
      • 1970-01-01
      • 2011-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多