我想知道在会话变量中存储缓存项是否可行,而不是创建基于文件的缓存解决方案?因为它是每个用户一次,如果用户访问多个页面,它可以减少对数据库的一些额外调用。但值得努力吗?
答案 0 :(得分:1)
它可以,但它在很大程度上取决于你要缓存的内容,以及其他一些情况。
在某些情况下,性能提升可能很大。在我所使用的特定ASP.NET / SQL Server站点上,添加一个简单的缓存机制(在应用程序级别)将Web服务器上的CPU负载减少了3倍(!),同时防止了一大堆访问某个表时数据库超时问题。
我已经有一段时间了,因为我已经在PHP中做了很多事情,但我认为你唯一的选择是在会话级别这样做。然而,我上面的大多数考虑仍然有效。至于努力;假设您的代码结构合理,则应该花很少的精力来实现。
答案 1 :(得分:1)
如果你正在缓存(愿意缓存)的数据不依赖于用户,你为什么要存储在附加给用户的会话中?
考虑到会话通常存储在文件中,与其自己使用文件相比,它不会优化任何内容。
如果您在网站上有10个用户,那么缓存中的数据将是10倍?我不认为这是缓存事物的最佳方式; - )
对于所有用户都相同的数据,我真的会选择其他解决方案,无论是基于文件还是不是(即使是针对一个用户或一组用户的数据,我也可能不会将其存储在会话 - 除非非常小,否则)
你可以看一些事情:
接下来的问题是:您需要缓存什么?多长时间 ?但这是另一个问题,只有你能回答这个问题; - )
答案 2 :(得分:-1)
会话应该仅用于严格用于用户特定数据。如果你使用它来缓存多个会话中应该是常见的东西,那么你就会不必要地复制大量数据。为什么不使用ASP.NET附带的Cache(如果您关心的是DB往返,则可以使用inProcess而不是SQL,因为您将在内存中存储缓存数据)