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

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

我想使用文件存储缓存来保留大量不经常更改的页面(有些根本不会更改) – 即页面缓存 – 并使用memcached进行其他操作(操作和数据库缓存等)。 原因是存储在文件存储缓存中的页面可能需要大量存储空间,但是大多数页面都不经常访问。

这是可能的,还是将memcached配置为缓存意味着它还用于页面缓存?

作为第二个问题,在某种forms的cron作业中从文件存储缓存中删除页面的安全方法是什么,因为似乎没有为此缓存指定ttl的选项。 例如,UNIX查找命令可以快速查找并删除长时间未访问过的所有旧页面或页面 – 如果应用程序服务器可能尝试在此时为其中一个页面提供服务,这样做是否安全(tho)这是不太可能的)? 如果没有,那么最好的方法是什么。

如果您只想将文件系统用于页面缓存,而将memcached用于操作和片段缓存,那么你很好。 页面缓存始终使用文件系统。 请记住,页面缓存会绕过您的Rails应用程序,因此您不能将其用于包含从用户更改为用户的内容或使用filter进行访问控制的页面的页面。

关于页面的删除,在Unix上,可以删除文件,但在关闭所有打开的文件句柄之前,它实际上不会从磁盘中删除。 如果应用服务器已打开文件以提供请求,并且find命令稍后会在一瞬间删除它,则应用服务器在尝试读取时不会突然收到错误。

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

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

Varnish的性能与它一样高,但需要在托管环境中设置另一个移动件作为代理。 这可能仍然值得,取决于你正在做什么。

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