(A) 缓存 $_SESSION 数组中每次页面加载时使用的数据是否“更好”(更高效、更快、更安全等)(但仍在查询表以获取标志以重新加载数据新鲜), 或 (B) 每次都从数据库加载它?
我正在使用缓存方法 (A),但我担心有数百个用户时,内存会成为问题吗?这只是简单的数据,例如名字、姓氏、生日等。
无论使用哪种方法,都会有一个查询正在运行。想法?
最佳答案
如果您的数据在每个页面上都使用,并且对所有用户都是相同的,我不会将其缓存在 $_SESSION 中(这意味着每个用户都有该数据的不同副本),而是使用另一种机制,例如:
- 文件
- 在内存中,以 APC 为例(如果只有 1 个服务器)
- 在内存中,例如使用 memcached(如果您有多个服务器)
- 如果您的数据需要长时间计算或获得多个数据库查询,则将其缓存在数据库中可能是另一种可能性(这意味着只有一个查询可以取回,并且计算更少)
如果每个用户的数据都不相同(在您的情况下似乎就是这种情况,因为您正在缓存姓名、生日……):
- 我会确保只缓存必要的内容
- 一旦你只有少量数据要缓存,将它放入 session 中应该就可以了
- 如果您真的有那么多用户,您可能会遇到其他一些可扩展性问题,并且很可能会开始使用诸如 memcached 之类的东西;这意味着您将有一些其他的缓存方式 ;-)
作为旁注:如果您一遍又一遍地执行相同的查询,您的数据库服务器应该自己缓存它(对于 MySQL,它将进入“query cache”);所以,它不会像你想象的那么糟糕,我想——即使没有那么优化 ^^
关于php - 在PHP SESSION中缓存数据,还是每次都从db查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1387587/