首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActiveSupport::Cache::Strategy::LocalCache用于什么?

ActiveSupport::Cache::Strategy::LocalCache用于什么?
EN

Stack Overflow用户
提问于 2013-11-19 01:01:39
回答 2查看 1.5K关注 0票数 3

在我的生产中间件堆栈中,在所有环境中,我都看到了这个一次性的实例:

代码语言:javascript
复制
use #<ActiveSupport::Cache::Strategy::LocalCache::Middleware:0x7f38095d>

我尝试过移除与缓存相关的所有东西,但我无法弄清楚它从何而来。

那是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-26 08:29:22

在抽象中,它在块的持续时间内用内存中的缓存包装另一个缓存,然后在块之后清除。

实际上,我认为在Rails/Rack中使用它来包装您配置的任何缓存(memcached,disk),并在请求结束时清除内存中的缓存。这样做的想法是,如果在一个请求中提取两次相同的缓存密钥,那么它将被缓存在第一个请求的包装LocalCache中,并将从第二个请求的内存中加载(而不是再次到达memcached服务器/磁盘)。

文档中的

实现LocalCache的缓存将在块期间由内存中的缓存支持。重复调用相同键的缓存将访问内存中的缓存以获得更快的访问速度。

Git历史:cache.rb

RDoc:http://api.rubyonrails.org/classes/ActiveSupport/Cache/Strategy/LocalCache.html

票数 2
EN

Stack Overflow用户

发布于 2014-07-28 16:30:05

首先,我想从正式文件中向你们展示一些方法。

代码语言:javascript
复制
ActiveSupport::Cache::DalliStore#with_local_cache

def with_local_cache
  use_temporary_local_cache(LocalStore.new) { yield }
end

def use_temporary_local_cache(temporary_cache)
  save_cache = LocalCacheRegistry.cache_for(local_cache_key)
  begin
    LocalCacheRegistry.set_cache_for(local_cache_key, temporary_cache)
    yield
  ensure
    LocalCacheRegistry.set_cache_for(local_cache_key, save_cache)
  end
end

def write(name, value, options=nil)
  options ||= {}
  name = expanded_key name

  instrument(:write, name, options) do |payload|
    with do |connection|
      options = options.merge(:connection => connection)
      write_entry(name, value, options)
    end
  end
end

def write_entry(key, entry, options) # :nodoc:
  local_cache.write_entry(key, entry, options) if local_cache
  super
end

现在,我们在实践中使用它们。

代码语言:javascript
复制
@cache = Rails.cache
@cache.with_local_cache do
   @cache.write('key', 'value')
end

如果将上面的代码组合在一起,您将发现应该有两个缓存('key', 'value')对的位置。一个是LocalCache,另一个是我们的@cache。它的用途在源代码中明确声明。

实现缓存的LocalCache将在块期间由内存中的缓存支持。为了更快地访问,重复调用缓存中相同的键将访问内存中的缓存。

我希望这会对你有帮助!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20061161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档