Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在维护身份验证信息的同时积极缓存生成的内容_Php_Caching_Symfony - Fatal编程技术网

Php 在维护身份验证信息的同时积极缓存生成的内容

Php 在维护身份验证信息的同时积极缓存生成的内容,php,caching,symfony,Php,Caching,Symfony,我正在使用symfony2从MySQL数据库中的数据生成我的页面。对于大多数内容,必须对用户进行身份验证,但内容本身不会经常更改,也不需要为用户定制。那么,在保持身份验证检查的同时,有什么好的缓存策略可以避免数据库调用呢?简单地说,使用Memcache可以将SQL结果集缓存更长的时间。使用symphony进行缓存,您似乎有很多选择(不适用于2,但我猜不会有太多变化) 您可以将繁重的sql语句放在自己的脚本中,并为该脚本打开缓存 list: enabled: on with_lay

我正在使用symfony2从MySQL数据库中的数据生成我的页面。对于大多数内容,必须对用户进行身份验证,但内容本身不会经常更改,也不需要为用户定制。那么,在保持身份验证检查的同时,有什么好的缓存策略可以避免数据库调用呢?

简单地说,使用Memcache可以将SQL结果集缓存更长的时间。

使用symphony进行缓存,您似乎有很多选择(不适用于2,但我猜不会有太多变化)

您可以将繁重的sql语句放在自己的脚本中,并为该脚本打开缓存

list:
  enabled:     on
  with_layout: false   # Default value
  lifetime:    86400   # Default value
此外,如果您确定生成的标记在一段时间内不会更改,您可以使用symfony告诉用户的浏览器,甚至不要为内容干扰服务器,这将导致用户几乎立即加载页面

$this->getResponse()->addCacheControlHttpHeader('max_age=1200'); // in seconds - less than 1 year seconds

只需确保您的最大年龄足够小,以便在发生更改(例如代码更新)时,用户不会被旧页面卡住,因为在不更改url的情况下,无法强迫他们再次请求该页面。

这可能是太大的更改,但以下方案在这种情况下可能有用:

创建多个页面集,一个用于尚未授权的用户(让我们放在站点根目录中),另一个用于应该看到相同内容的经过身份验证的用户(例如,两个或两个以上的用户在经过身份验证时应该看到相同的内容,然后我们将仅为所有用户创建一个页面集),并将其放入根目录下的目录中。然后为每个这样的“仅授权”目录形成简单的.htaccess/.htpasswd文件,然后这将是webserver的问题,而不是您的脚本

希望你有这个想法。说起来很模糊,但很容易实现


示例:假设您只允许经过身份验证的用户查看站点上的“/topsecret.html”页面。创建目录(/authed),在其上建立HTTPAuth,并将topsecret.html放入目录中(因此它将是“/authed/topsecret.html”)。现在编辑“/topsecret.html”并简单地将其主要内容替换为“对不起,请验证您自己”链接,该链接将指向“/authed/topsecret.html”

如果您使用Symfony2,则您使用的是Doctrine2 如果使用Doctrine2,默认情况下应该启用缓存

根据您的需要选择缓存驱动程序,应该没有问题。 您可能还特别感兴趣

不要在没有元数据和查询缓存的情况下使用条令!教义是 针对使用缓存进行了高度优化。学说的主要部分 为缓存而优化的是元数据映射信息 使用元数据缓存和查询的DQL到SQL转换 隐藏物这两个缓存只需要绝对最小的内存 它们极大地提高了条令的运行时性能。这个 建议与条令一起使用的缓存驱动程序是APC。APC为您提供 有一个操作码缓存(无论如何强烈推荐)和一个 快速内存缓存存储,可用于元数据和 查询缓存

我通过在可缓存操作中使用来存储渲染的模板结果,解决了这个问题。然后,我从缓存的内容创建一个新的
Response
对象。如果缓存为空,则生成内容


我曾想过创建一个插件来检查注释并自动存储响应输出,但结果证明我只有3-4个可缓存的显示操作,并且具有非常复杂的缓存ID创建规则,因此,我将缓存逻辑直接放入控制器代码中。

TFM似乎有一些不错的信息——在我看来,AppCache具有您所需的所有优点,可能只需要检查请求是否经过身份验证,或者在缓存响应之前检查非公共资源。这并不能解决他的问题。他希望缓存MySQL而不是HTTP请求的查询。