Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在rails中使用多个缓存?_Ruby On Rails_Caching - Fatal编程技术网

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

Ruby on rails 如何在rails中使用多个缓存?,ruby-on-rails,caching,Ruby On Rails,Caching,我有一个rails应用程序,我想在其中使用memcached和文件存储缓存,用于不同的目的 我想使用文件存储缓存来保存大量不经常更改(有些根本不更改)的页面,即页面缓存,并使用memcached来处理其他所有事情(操作和数据库缓存等)。原因是,存储在文件存储缓存中的页面可能需要大量存储,但大多数页面单独访问的频率较低 这是可能的,还是将memcached配置为缓存意味着它也用于页面缓存 第二个问题是,在某种形式的cron作业中,从文件存储缓存中删除页面的安全方法是什么,因为似乎没有为该缓存指定t

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

我想使用文件存储缓存来保存大量不经常更改(有些根本不更改)的页面,即页面缓存,并使用memcached来处理其他所有事情(操作和数据库缓存等)。原因是,存储在文件存储缓存中的页面可能需要大量存储,但大多数页面单独访问的频率较低

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


第二个问题是,在某种形式的cron作业中,从文件存储缓存中删除页面的安全方法是什么,因为似乎没有为该缓存指定ttl的选项。例如,UNIX find命令将快速查找并删除所有旧页面或长时间未访问的页面-鉴于应用程序服务器当时可能会尝试为其中一个页面提供服务,这样做安全吗(尽管可能性很小)?如果不是,那么什么是最好的方法。

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

它的性能相当高,但需要在宿主环境中设置另一个移动部件作为代理。这可能仍然是值得的,这取决于你在做什么


一种更简单的方法可能是,如果您使用的是支持机架的rails版本,那么设置起来就很容易了。

如果您只想将文件系统用于页面缓存,而将memcached用于操作和片段缓存,那么就可以了。页面缓存始终使用文件系统。请记住,页面缓存会绕过Rails应用程序,因此不能将其用于包含不同用户之间更改的内容的页面,也不能用于通过过滤器控制访问的页面

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


你也可以考虑使用<代码>查找/代码>根据它们的最后访问时间删除文件,而不是创建或修改,并使用Rails应用程序中的清扫器来删除缓存页面,当其内容过时时,

是否使用了两个缓存?我也想这样做。不过,我们目前正在运行Rails 2.0.2,我认为这会使问题更加严重……是的,将页面的文件存储缓存与其他页面的内存缓存(如果您配置了memcached)结合起来似乎是可以的(也是默认的)