如何在rails中使用多个缓存?

我有一个Rails应用程序,我想将memcached和文件存储缓存用于不同的目的。

我想使用文件存储缓存来保留大量不经常改变的页面(一些完全不) - 也就是页面缓存 - 并且在所有其他操作(动作和数据库缓存等)中使用memcached。 原因是存储在文件存储缓存中的页面可能需要大量存储空间,但单独大多数页面不会经常访问。

这可能做或将配置memcached作为缓存意味着它也用于页面缓存?

作为第二个问题,以某种形式的cron作业从文件存储缓存中删除页面的安全方式是什么,因为似乎没有为此缓存指定ttl的选项。 例如,UNIX查找命令可以快速找到并删除所有旧的页面或页面,这些页面或页面很长时间都没有被访问 - 这是安全的,因为应用服务器可能会尝试在当时为这些页面中的一个提供服务(tho这是非常不可能的)? 如果没有,那么做到这一点的最好方法是什么。


如果您只想将文件系统用于页面缓存,并使用memcached进行操作和片段缓存,那就没问题。 页面缓存总是使用文件系统。 请记住,页面缓存绕过了您的Rails应用程序,因此您不能将其用于包含从用户到用户更改的内容的页面或者使用筛选器访问控制的页面。

关于删除页面,在Unix上,一个文件可以被删除,但是直到所有打开的文件句柄关闭之前,它才真正从磁盘中删除。 如果应用程序服务器已打开文件以提供请求,并且find命令稍后将其删除,则应用程序服务器在尝试读取时不会突然出现错误。

您也可以考虑根据上次访问时间find删除文件,而不是创建或修改,并在您的Rails应用中使用清理程序在内容过期时删除缓存页面。


更简单的方法可能是在应用程序上游使用http缓存作为页面缓存,而不是使用rails中的两个存储。 这样你可以使用http头来控制缓存行为,包括TTL。 这些相同的限制也适用于浏览器的本地缓存,作为一个不错的奖励。

Varnish的表现与其性能相当,但需要在您的托管环境中设置另一个动态片段作为代理。 这可能仍然是值得的,这取决于你在做什么。

一个更简单的方法可能是Rack :: Cache,如果您使用支持机架的导轨版本,这将很容易设置。

链接地址: http://www.djcxy.com/p/42515.html

上一篇: How to use multiple caches in rails?

下一篇: Manual links with SEF on Joomla!