rails默认缓存如何工作

时间:2014-12-21 20:00:19

标签: ruby-on-rails ruby-on-rails-4 token

我有一定数量的用户使用的应用。在应用程序的某个时刻,我这样做

Rails.cache.write('token', ['token'])

另一方面,我是Rails.cache.read('token')读到的。但我想知道:Rails.cache是全球性的吗?我的意思是,用户是否会访问相同的令牌。假设用户A记录,他的令牌被保存,然后用户B记录,他的令牌以相同的方式保存。在将来的操作中,用户A是否会访问用户B写的令牌?

1 个答案:

答案 0 :(得分:2)

是的,即使对于不同的用户,缓存也是全局的。有a guide about caching

背后有一个原因。缓存实际上是为应用程序设计的,以便更快地响应即使是不同用户发出的类似查询。通常,片段(甚至整个页面)在更改之后(通过che"缓存失效"机制)呈现,然后仅从缓存中提供已呈现的对象。

例如,这在新闻网站上效果非常好,其中包含文章的页面仅针对第一个阅读器呈现,并进一步呈现绕过页面生成并直接从缓存提供已呈现的页面,大大增加了数量服务器可以承受的读者(与每次请求时生成页面相反)。

如果只有一个缓存服务,则相同的缓存密钥将始终指向任何用户的相同数据(如果它不会更改)。如果有多个(例如,如果多个应用实例在带有负载均衡器的同一个数据库上运行),如果应用设计正确,结果仍然相同。

任何特定于用户的内容只能存储在会话 Cookie 中(我甚至可以看到基于Cookie的会话)。