我的Drupal 7站点之一有数千个字段、一组内容类型、25多个视图和数百个(很快就会有数千个)配置文件类型。正因为如此,我使用了一个更好地缓存实体字段信息(http://drupal.org/node/1040790)的核心修补程序,以及通过显示更好地缓存视图的-dev版本(而不是有一个包含所有视图数据的巨大视图缓存行)。
这帮助站点上的大多数页面加载使用20-30MB内存的内存,而不是160MB+ (而不是为属于10MB+的字段和视图拉出cache_*表行,这些修补程序有助于保持cache_*数据的更高效率)。
然而,这带来了一个问题,即缓存重建需要很长时间。通常超过一到两分钟。在此期间,Drupal根本不会加载任何页面(因为它试图读取的缓存尚未构建,其他请求必须等待)。
在低流量周期中,这并不是什么大问题;大约100名用户只需等待一分钟才能加载页面。但是在高流量周期中,Apache服务器开始疯狂,40+的CPU负载,内存很快被填满,因为所有的工作线程都在等待,最大限度地释放它们的内存,导致交换。这是一种死亡螺旋。重新启动httpd将清除所有内容,但恢复正常需要5-10分钟。
我的目标是使它,使缓存清除不会使网站屈服。例如,如果我使用admin_Menu的单独缓存清除功能(比如"CSS和JS",然后是“菜单”,然后是“主题注册表”,等等),事情就会顺利进行,直到我点击"Page and else“选项。这是视图的缓存被重置的时候(这是一个非常复杂的CPU和数据库操作,需要缓存的视图数),当字段信息缓存被重置时(在这个站点上也是CPU和数据库密集)。
所以..。我的问题/想法:
基本上:除了单击UI中的按钮或使用drush cc all之外,是否有任何智能和优雅的方法来清除Drupal中的所有缓存?
编辑以澄清:我遇到的主要问题是缓存重新构建,其中(A)需要一段时间,(B)阻塞所有其他请求,直到重建完成为止。我想找到一种方法,以使重建不太致命的高交通时期。
发布于 2012-11-08 17:26:52
除了简单地单击UI中的按钮或使用drush cc all,是否有任何智能和优雅的方法来清除Drupal中的所有缓存?
缓存动作模块就是这样做的。这取决于规则。例如,当添加或更新"x“类型的节点时,可以设置规则以清除特定的视图。有关更多细节,请查看文档。
还请看一下缓存优美模块--还没有尝试过,但看起来很有趣。
发布于 2012-11-14 09:13:19
主要的问题是您正在使用MySQL来存储缓存数据-对于高负载的站点来说,这是非常无效的解决方案。
我建议改用模缓存。这将极大地提高缓存系统的性能,并给您带来两个巨大的好处:
下面是用于Drupal 7的模缓存配置示例。
发布于 2015-07-08 16:40:17
这可能涉及到金钱成本,但您可以使用类似Varnish的缓存服务器设置。好处是,虽然您的缓存正在生产服务器上清除,但用户没有更多的智慧,Varnish将为您的站点提供服务。
缺点:根据生产服务器的停机时间和VCL超时设置的时间长短而定,Varnish可能会在这段时间内进行更新,您将看到Varnix503错误屏幕。
但是,这种方法以及Redis或Memcache可能会有所帮助。
https://drupal.stackexchange.com/questions/50040
复制相似问题