加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

ruby-on-rails – Memcached大小限制到底与文件系统实体库有什么

发布时间:2020-12-16 05:53:07 所属栏目:安全 来源:网络整理
导读:下午好, 我把Memcached连接到Heroku的应用程序中.免费托管计划的限制是Memcached为5MB,Memcachier为25MB.作为几乎所有事物的新手,我只是希望澄清这代表什么. 我在配置文件中设置了DalliStore,并为Rack :: Cache设置了典型选项.我的Metastore在Memcache中,并
下午好,

我把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
}

解决方法

我一直在努力解决类似的问题.

首先,让我们的术语直截了当.

> Memcached:在某个服务器上运行的进程(d代表守护进程),它实际上将键值对存储在内存中.
> cache_store:使用单个API的Rails缓存存储(Rails.cache),可以配置为使用不同的Ruby软件实现. config.cache_store的一个设置是:memory_store以使用内存中实现.另一个设置是:dalli_store指定使用dalli gem,它在引擎盖下与memcached服务器建立可能的远程连接.
> 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,而memcached用于Metastore.

至于实际存储在Rack :: Cache Metastore中的内容,这些是来自rack-cache v1.2 Rack::Cache::MetaStore类的文档:

The MetaStore is responsible for storing meta information about a
request/response pair keyed by the request's URL.

The meta store keeps a list of request/response pairs for each canonical
request URL. A request/response pair is a two element Array of the form:
  [request,response]

The +request+ element is a Hash of Rack environment keys. Only protocol
keys (i.e.,those that start with "HTTP_") are stored. The +response+
element is a Hash of cached HTTP response headers for the paired request.

因此,为了回答您的问题,HTTP请求标头和HTTP响应标头存储在Rack :: Cache Metastore中.另一方面,Rack :: Cache实体库存储整个响应主体(即HTML).

从you can’t use page caching reliably on Heroku开始,这意味着您可能正在使用操作缓存和片段缓存.操作和片段缓存使用您的Rails缓存存储(而不是机架缓存).但是如果你将它们都设置为物理上使用相同的memcached服务器,它们都会有助于内存使用.操作和部分缓存存储实际的HTML.

为了更深入地了解您的实际使用情况,如果您正在使用memcachier,请运行以下命令在浏览器中打开分析仪表板.

heroku addons:open memcachier

有关获取memcached统计信息的详细信息,请参阅this question.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读