问题描述
|
我正在使用Symfony 2从MysqL数据库中的数据生成页面。对于大多数内容,必须对用户进行身份验证,但是内容本身不会经常更改,也不需要为用户定制。那么,在保持身份验证检查的同时避免数据库调用的一种很好的缓存策略是什么呢?
解决方法
简而言之,请使用Memcache缓存SQL结果集更长的时间。
, 也许这是一个太大的更改,但是在这种情况下,以下方案可能会有用:
创建几组页面,一组用于尚未认证的用户(将其放在网站根目录中),另一组用于已认证的用户,这些用户应看到相同的内容(例如,两个或更多页面应在以下情况下看到相同的内容)它们经过身份验证,然后我们将仅为它们创建一组),并将其放入根目录下。然后为每个“仅用于身份验证”目录形成简单的.htaccess / .htpasswd文件,这将是Web服务器的问题而不是您的脚本。
希望你有主意。说的很模糊,但是易于实现。
示例:假设您只允许经过身份验证的用户查看网站上的页面\'/ topsecret.html \。创建目录(/ authed),在其上建立HTTP-auth,然后将topsecret.html放入目录(这样它将是\'/ authed / topsecret.html \')。现在,编辑\'/ topsecret.html \'并简单地用\'sorry替换它的主要内容,请对您自己的链接进行验证,该链接将指向\'/ authed / topsecret.html \'。
, 如果使用Symfony2,则使用的是Doctrine2
如果使用Doctrine2,则默认情况下应启用缓存。
选择适合您用途的缓存驱动程序,应该没有问题。
您可能还对查询结果缓存特别感兴趣。
如果没有元数据和查询缓存,请不要使用Doctrine!主义是
为使用缓存进行了高度优化。教义的主要部分
为缓存而优化的是元数据映射信息
通过元数据缓存和带有查询的DQL到SQL转换
缓存。这两个缓存仅需要绝对最小的内存
它们极大地提高了Doctrine的运行时性能。的
推荐与Doctrine一起使用的缓存驱动程序是APC。 APC为您提供
具有操作码缓存(强烈建议使用)和一个非常
快速的内存中高速缓存存储,可用于元数据和
查询缓存
, 我通过在可缓存操作中使用Zend_Cache来存储呈现的模板结果来解决此问题。然后,我从缓存的内容中创建一个新的“ 0”对象。如果缓存为空,则生成内容。
我想到创建一个插件来检查注释并自动存储Response输出,但事实证明,我只有3-4个可缓存的显示操作,并且具有非常复杂的缓存ID创建规则,因此我将缓存逻辑直接放入控制器代码。
, 似乎您可以使用多种方法来使用交响乐进行缓存http://www.symfony-project.org/book/1_2/12-Caching(不是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的情况下强迫他们再次请求该页面。