Rails:如何从Rails.Cache中获取所有键值



我想通过rails.cache(memory_store(在线维护用户/离线列表。

基本上,如果请求/user/heartbeat?name=John到达Rails Server,它将仅:

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

但是,我如何将所有数据存储在railss.cache中。

类似?
def get_status
  # wrong codes, as Rails.cache.read doesn't have :all option.
  ary = Rails.cache.read(:all)
  # deal with array ...
end

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

我正在使用Rails 5.0.2

感谢您的时间!

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

keys = Rails.cache.instance_variable_get(:@data).keys

如果您有redis,则可以使用 Rails.cache.redis.keys

这样的sth

如果您使用redis,似乎没有任何答案可以工作。相反,您必须使用redis-rb:

redis = Redis.new(url: ENV["REDIS_URL"])
redis.keys("*")

此外,您可以在钥匙上迭代以获取其值并显示全部

keys = Rails.cache.instance_variable_get(:@data).keys
keys.each{|key| puts "key: #{key}, value: #{Rails.cache.fetch(key)}"}

或直接映射它们:

key_values = Rails.cache.instance_variable_get(:@data).keys.map{|key| {key: key, value: Rails.cache.fetch(key)}}

此外,我会事先检查键的量,以确保我不会提出巨大的对象(如果是这样,则将生成的键_Value数组限制为前一个1000个项目(。您可以使用:

Rails.cache.instance_variable_get(:@data).keys.count

或只是查看stats命令的最后一行:

Rails.cache.stats

上述答案对我有帮助。可以通过循环

可以看到现有的缓存值
 Rails.cache.redis.keys.each{ |k| puts k if Rails.cache.exist?(k)}

如果您有连接池,请尝试:

Rails.cache.redis.with do |conn|
  conn.keys
end

最新更新