ASP.NET或PHP:Memcached对存储用户状态信息有用吗?

时间:2010-05-10 14:23:59

标签: php asp.net session caching memcached

这个问题可能会暴露我作为网络开发者的无知,但这对我来说不是一件坏事吗?

我需要存储用户状态信息。我需要为每个用户存储的信息示例。 (定义用户:未经身份验证的访问者)

  1. 用户从google / bing / yahoo
  2. 到达网站
  3. 用户使用了搜索功能(true / false)
  4. 当前访问的以前访问过的产品页面列表
  5. 我的理解是我可以将它存储在视图状态中,但是从最终用户的角度来看会导致页面加载出现问题,因为大量的不可见信息正在传输到最终用户 - 用户即使服务器是唯一需要信息的一方。

    在类似的说明中,我的理解是会话状态可用于存储此类信息,但这是否也会导致相同的信息传输给用户并存储在其cookie中? (不像viewstate那么糟糕,但感觉并不理想)。

    这使我只能使用服务器会话存储系统或内存缓存解决方案。

    memcached是唯一的好选择吗?

2 个答案:

答案 0 :(得分:1)

Memcached适合经常阅读/写很少的键/值数据,顾名思义就是缓存。例如如果您正在提供不经常更改的产品信息,则将其存储在memcached中,这样您就不会重复查询数据库中的半静态数据。您应该使用会话状态来存储您的信息,唯一会传递的是会话标识符,而不是保留在服务器上的实际数据。

答案 1 :(得分:1)

第1项和第2项似乎是记录信息 - 即除非您想保留其搜索条件,否则没有明确的要求引用它们。那么只需将它写入某个日志并忘记它?

  

我可以将它存储在视图状态

我猜这是一个asp.net的东西 - 当然这对我没什么意义,所以我不能发表评论。

  

我的理解是会话状态可用于存储此类信息

是的 - 它将成为我对项目3的首选存储库。

  

这是否也导致相同的信息被传输给用户并存储在他们的cookie中?

否 - 会话cookie只是PHP中存储服务器端数据的句柄(以及我遇到的所有其他HTTP sesion imlpementation)。

  

这使我无法使用服务器会话存储系统或内存缓存解决方案

memcache实际上只是使用作为会话存储基板。

是否应该在单个服务器上使用memcache作为会话存储基板....这里没有很多优势 - 尽管NT(IIRC)使用固定大小的缓存/缓冲区(而Posix / Unix / Linux将使用所有可用内存)我仍然期望大多数会话I / O是内存而不是磁盘,除非您的站点过载。真正的优势是,如果您正在运行集群(但在这种情况下,您可能需要考虑像Cassandra这样的事情。)

IME,会话不是很大的开销,但是如果你想在会话中保留活动的无限期历史,那么你应该溢出数据(或保持它与会话分开)以防止它过多大。

下进行。