我有一个rails应用程序,我想同时使用memcached和文件存储缓存,用于不同目的。
我想使用文件存储缓存来保留大量不经常更改的页面(有些根本不会更改) - 即页面缓存 - 并将memcached用于其他所有内容(操作和数据库缓存等)。原因是存储在文件存储缓存中的页面可能需要大量存储空间,但是大多数页面都会不经常访问。
这可以做或者将memcached配置为缓存意味着它还用于页面缓存吗?
作为第二个问题,在某种形式的cron作业中从文件存储缓存中删除页面的安全方法是什么,因为似乎没有为此缓存指定ttl的选项。例如,UNIX查找命令可以快速查找并删除长时间未访问的所有旧页面或页面 - 如果应用程序服务器可能尝试在此时为其中一个页面提供服务,这样做是否安全(tho)这是不太可能的)?如果没有,那么最好的方法是什么。
答案 0 :(得分:2)
更简单的方法可能是将应用程序上游的http缓存用作页面缓存,而不是在rails中使用两个存储。这样,您可以使用http标头来控制缓存行为,包括TTL。这些相同的限制也适用于浏览器的本地缓存作为一个很好的奖励。
Varnish的性能与它一样高,但需要在托管环境中设置另一个移动部件作为代理。根据你正在做的事情,这可能仍然值得。
更简单的方法可能是Rack::Cache,只要您使用的是支持机架的版本的导轨,就可以轻松设置。
答案 1 :(得分:2)
如果您只想将文件系统用于页面缓存,而将memcached用于操作和片段缓存,那么您没问题。页面缓存始终使用文件系统。请记住,页面缓存会绕过您的Rails应用程序,因此您不能将其用于包含从用户更改为用户的内容或使用过滤器进行访问控制的页面的页面。
关于页面的删除,在Unix上,可以删除文件,但在关闭所有打开的文件句柄之前,它实际上不会从磁盘中删除。如果应用服务器已打开文件以提供请求,并且find命令稍后会在一瞬间删除它,则应用服务器在尝试读取时不会突然收到错误。
您还可以考虑让find
根据上次访问时间删除文件,而不是创建或修改文件,并在Rails应用程序中使用清扫程序在内容过期时删除缓存页面。 / p>