【发布时间】:2009-07-24 02:56:59
【问题描述】:
我想知道将缓存项目存储在 Session 变量中是否可行,而不是创建基于文件的缓存解决方案?因为它是每个用户一次,所以如果用户访问多个页面,它可以减少对数据库的一些额外调用。但值得付出努力吗?
【问题讨论】:
-
你在说什么语言/平台?
我想知道将缓存项目存储在 Session 变量中是否可行,而不是创建基于文件的缓存解决方案?因为它是每个用户一次,所以如果用户访问多个页面,它可以减少对数据库的一些额外调用。但值得付出努力吗?
【问题讨论】:
如果你正在缓存的数据(愿意缓存)不依赖于用户,你为什么要存储在会话中......它附加到用户?
考虑到会话通常存储在文件中,与自己使用文件相比,它不会优化任何东西。
如果站点上有 10 个用户,缓存中的相同数据将是 10 倍?我不认为这是缓存东西的最佳方式;-)
对于所有用户都相同的数据,我真的会采用另一种解决方案,无论是否基于文件(即使对于特定于一个用户或一组用户的数据,我也可能不会将其存储在会话——除非非常小,也许)
有些东西你可以看看:
下一个问题是:你需要缓存什么?多长时间 ?但这是另一个问题,只有你能回答;-)
【讨论】:
可以,但这在很大程度上取决于您要缓存的内容以及其他一些情况。
在某些情况下,性能提升可能很重要。在我工作过的特定 ASP.NET / SQL Server 站点上,添加一个简单的缓存机制(在应用程序级别)将 Web 服务器上的 CPU 负载减少了 3 倍(!),同时防止了一大堆访问某个表时出现的数据库超时问题。
自从我在 PHP 中做任何严肃的事情以来已经有一段时间了,但我认为您唯一的选择是在会话级别执行此操作。然而,我上面的大多数考虑仍然有效。至于努力;假设您的代码结构充分,实施起来应该花费很少的精力。
【讨论】:
Session 应该只严格用于用户特定的数据。如果您使用它来缓存应该在多个会话中通用的内容,那么您将不必要地复制大量数据。为什么不直接使用 ASP.NET 附带的缓存(如果您关心数据库往返,您可以使用 inProcess,而不是 SQL,因为您将在内存中存储缓存数据)
【讨论】: