rails:如何从Rails.cache获取所有键值

mCY*_*mCY 5 caching ruby-on-rails

我想用Rails.cache(memory_store)维护用户在线/离线列表.

基本上,如果请求/user/heartbeat?name=John到达Rails服务器,它将简单地:

def update_status
  name = params.require(:name)
  Rails.cache.write(name, Time.now.utc.iso8601, expires_in: 6.seconds)
end
Run Code Online (Sandbox Code Playgroud)

但是我如何才能获得存储在Rails.cache中的所有数据,如下所示?

def get_status
  # wrong codes, as Rails.cache.read doesn't have :all option.
  ary = Rails.cache.read(:all)
  # deal with array ...
end
Run Code Online (Sandbox Code Playgroud)

我google了一段时间,似乎Rails.cache没有提供直接获取所有数据的方法.或者有更好的方法来存储数据?

我正在使用Rails 5.0.2.

谢谢你的时间!

duy*_*tpt 12

您可以使用代码获取所有密钥:

keys = Rails.cache.instance_variable_get(:@data).keys
Run Code Online (Sandbox Code Playgroud)

  • /!\ 请注意,它不适用于所有缓存后端:例如,它适用于 `:memory_store`,但不适用于 Redis (`:redis_cache_store`)。 (4认同)
  • 我用 Rails 5.2.1 测试会导致同样的错误。您可以尝试使用“Rails.cache.redis.keys” (3认同)

sek*_*kmo 8

如果你有 redis,你可以使用 sth 之类的 Rails.cache.redis.keys