下午好,
我把Memcached连接到Heroku上的应用程序中 . 免费托管计划的限制是Memcached为5MB,Memcachier为25MB . 作为几乎所有事物的新手,我只是希望澄清这代表什么 .
我在配置文件中设置了DalliStore,并为Rack :: Cache设置了典型选项 . 我的Metastore在Memcache中,并且在文件系统上设置了权限存储 .
问题:
-
这是否意味着我的5 / 25MB限制仅被我存储的关于每个缓存片段的元信息使用?这意味着我能够在免费计划中存储大量信息吗?
-
Rack :: Cache和Memcache(通过Dalli商店)之间的细分/故事究竟是什么?它们是否有不同的用途?他们做同样的事吗?即以下代码是多余的
config.cache_store = :dalli_store
和
config.action_dispatch.rack_cache = {
:verbose => true,
:metastore => Dalli::Client.new,
:entitystore => 'file:tmp/cache/rack/body',
:allow_reload => false
}
2 回答
我一直在努力解决类似的问题 .
首先,让我们的术语直截了当 .
Memcached :在某个服务器上运行的进程(d代表守护进程),它实际上将键值对存储在内存中 .
cache_store :Rails缓存存储(
Rails.cache
),其中包含一个API,可配置为使用不同的Ruby软件实现 .config.cache_store
的一个设置是:memory_store
以使用内存中实现 . 另一个设置是:dalli_store
,它指定使用dalli gem,它在引擎盖下与memcached服务器 Build 了可能的远程连接 .Dalli Store :我假设您的意思是由dalli gem支持的Rails缓存,它在memcached中物理存储值 .
Rack::Cache :机架中间件将标头(Expires,Cache-Control,ETag等)插入到HTTP响应中,并且还充当反向代理缓存,在可能的情况下处理请求之前处理Rails堆栈 . 见website .
为了让Rack :: Cache在它们到达Rails堆栈和应用程序的其余部分之前处理请求,它必须在某处存储响应元数据 . 它存储的位置由
config.action_dispatch.rack_cache = { ... }
设置配置 .请注意,这是与
config.cache_store = :dalli_store
不同的设置 . 他们没有必要相关 . 我认为这是很多混乱的地方 . 但实际上,我们可能希望它们都使用memcached,这意味着使用dalli实现 . 但是,它们每个都有自己的Dalli::Client
实例 . (另外,您的session_store可能是相关的,但不一定是 . )Heroku雪松堆有一个ephemeral file system,不能在dynos之间共享 . 但是,Heroku自己仅recommend using tmp file storage with Rack::Cache为
entitystore
,而memcached用于metastore
.至于实际存储在Rack :: Cache Metastore中的内容,这些是来自rack-cache v1.2 Rack::Cache::MetaStore类的文档:
因此,为了回答您的问题,HTTP请求标头和HTTP响应标头存储在Rack :: Cache Metastore中 . 另一方面,Rack :: Cache实体库存储整个响应主体(即HTML) .
从you can't use page caching reliably on Heroku开始,这意味着您可能正在使用动作缓存和片段缓存 . 操作和片段缓存使用您的Rails缓存存储(而不是机架缓存) . 但是如果你对内存的使用都有贡献的话 . 操作和部分缓存存储实际的HTML .
为了更深入地了解您的实际使用情况,如果您正在使用memcachier,请运行以下命令在浏览器中打开分析仪表板 .
有关获取memcached统计信息的详细信息,请参阅this question .
嗯,这不容易回答 .
首先,您可能不会在Heroku文件系统上存储任何内容,因为它不可写 . 因此,您应该将所有内容存储在Memcache中 . 因此,在免费计划中,您将存储5 / 25mb的数据,包括实体和元数据 .
正如文档所说(对于Cedar堆栈):
因此,使用文件系统似乎相当可行,特别是如果您使用单个dyno .
关于Rack :: Cache和Memcache之间的区别:Memcache是一个存储键/值对的服务器,在内存中有一些额外的好属性 .
config.cache_store = :dalli_store
配置Rails.cache
这是对可以使用的不同缓存机制的抽象 . 它是通用的,您可以将它用于任意键/值存储,操作和片段缓存 .另一方面,Rack :: Cache是Varnish的替代品,允许您缓存整个请求 .