它是“更好”(更高效,更快,更安全等)到(A)缓存数据,用于$_SESSION数组中的每个页面加载(但仍然查询表以获取标记以重新加载数据),或者(B)每次从数据库加载它?
如果您的数据在每个页面上使用,并且对所有用户都相同,我不会将其缓存在$_SESSION中(这意味着为每个用户提供不同的数据副本),但是还有另一种机制,例如:
>文件
>在内存中,例如APC(如果只有1台服务器)
>在内存中,例如使用memcached(如果你有几个服务器)
>如果您的数据需要长时间计算或获得多个数据库查询,则将其缓存在数据库中可能是另一种可能性(意味着只需要一次查询来获取,并且计算量更少)
如果您的数据对于每个用户来说都不相同(在您的情况下似乎就是这种情况,因为您正在缓存名称,生日,……):
>我会确保我只缓存必要的内容
>一旦你只有一些数据要缓存,把它放在会话中应该没问题
>如果你真的拥有那么多用户,你可能会遇到其他一些可扩展性问题,并且最有可能会使用像memcached这样的东西;这意味着你将有一些其他的缓存方式;-)
作为旁注:如果你一遍又一遍地做同样的查询,你的DB服务器应该自己缓存它(对于MySQL,它会进入“query cache”);所以,我认为它不会像你想象的那么糟糕 – 即使没有那么多优化^^