基于会话的缓存解决方案是否可行?

时间:2009-07-23 18:09:14

标签: php session caching

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

3 个答案:

答案 0 :(得分:1)

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

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

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

我已经有一段时间了,因为我已经在PHP中做了很多事情,但我认为你唯一的选择是在会话级别这样做。然而,我上面的大多数考虑仍然有效。至于努力;假设您的代码结构合理,则应该花很少的精力来实现。

答案 1 :(得分:1)

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

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

如果您在网站上有10个用户,那么缓存中的数据将是10倍?我不认为这是缓存事物的最佳方式; - )

对于所有用户都相同的数据,我真的会选择其他解决方案,无论是基于文件还是不是(即使是针对一个用户或一组用户的数据,我也可能不会将其存储在会话 - 除非非常小,否则)

你可以看一些事情:

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

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

答案 2 :(得分:-1)

会话应该仅用于严格用于用户特定数据。如果你使用它来缓存多个会话中应该是常见的东西,那么你就会不必要地复制大量数据。为什么不使用ASP.NET附带的Cache(如果您关心的是DB往返,则可以使用inProcess而不是SQL,因为您将在内存中存储缓存数据)