【问题标题】:Symfony2 storing data in session versus database calls every page loadSymfony2 在会话中存储数据与每次页面加载时都会调用数据库
【发布时间】:2015-01-29 18:07:35
【问题描述】:

我有一个基于 Symfony 2 构建的站点,该站点基本上由各种应用程序组成。选择应用程序后,我将该应用程序的 ID 存储在会话变量中。然后对于该应用程序的每次页面加载,都会查询数据库以获取该应用程序的详细信息。

将应用程序详细信息存储在会话变量中而不是仅存储应用程序 ID 不是更有效吗?

以这种方式存储应用程序详细信息有什么缺点,我需要担心什么安全风险吗?

非常感谢。

【问题讨论】:

  • 数据量是多少?
  • 也许您正在寻找有效的缓存和称为“varnish”的前端加速器。如果存在请求的缓存版本,则使用它根本没有对 symfony 的请求
  • 就像@DRC 说的数据量是多少,是什么类型的数据?这是一个表单,也许您可​​以部分保存它,以便用户将来可以回到应用程序并完成它
  • 最好只存储会话中对象的引用 (id) 以保持轻量级。然后,您可以轻松配置一个学说缓存层,将查询结果在内存中保留一段时间。希望对您有所帮助。
  • 我建议在Redis 中缓存序列化对象,并将其放在mysql db 的前面。基本上你需要在架构上解决这个问题。

标签: php database symfony session


【解决方案1】:

我不建议在会话中存储应用程序编号。您使用 http://symfony.com/doc/current/book/http_cache.html#public-vs-private-responses 这种方法剥夺了自己对共享 HTTP 缓存的使用,因为您的所有请求都变为 private 导致响应取决于 SESSION 值。

如果您将应用编号移动到 url 或标题等处,您将获得大量优化空间。

使用数据库获取应用程序信息是一种非常好的做法,因为您可以为此查询启用学说的结果缓存,以使其完全不影响应用程序性能。 http://doctrine-orm.readthedocs.org/en/latest/reference/caching.html#result-cache

使用 session 来存储 app_id 是不好的做法,但是使用 session 来存储所有应用程序信息更糟糕,因为 session_id 的数量很大,并且您将存储大量冗余信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多