我可以使用Rails.cache存储短期会话数据吗?

时间:2018-01-20 23:52:41

标签: ruby-on-rails

我们已经在使用基于cookie的会话,并且不能选择将它们关闭到文件存储会话。但是,我需要一种方法来存储更大量的会话数据(最多10MG左右) - 超出了cookie会话的限制,即使它不是,也不会绕过多个请求的大量数据会很慢。

我目前正试图通过使用(滥用?)Rails.cache来解决这个问题。基本设置如下:

我发布到一个路线,其中包含以下代码:

# calculate some results...
Rails.cache.write('search_results' + session.id), search_results)
redirect_to '/results'

GET /results内,我读取了缓存的数据并将其发送到客户端:

@results = Rails.cache.read('search_results' + session.id)

这很好用。但是,如果我随后向GET /results2之类的其他路线发出请求调用Rails.cache.read('search_results' + session.id),则会返回nil。即使所有呼叫都在5到10秒的范围内发生。

所以我的问题是:

  1. 为什么会这样?什么决定Rails.cache何时清理自己?
  2. 有没有办法让这项工作?
  3. 是否有一种更好的方法,不涉及使用数据库或redis?

1 个答案:

答案 0 :(得分:0)

回答你的问题:

  1. 文件缓存存储的问题是它在本地存储文件。因此,如果您有多个服务器,则可以将缓存写入一个服务器,而在另一个将返回“nil”的服务器上读取缓存。解决方案是使用可以在多个服务器之间共享的缓存存储。

  2. 使用redis-store可能是一个解决方案:https://github.com/redis-store/redis-rails