【发布时间】:2016-11-05 21:17:49
【问题描述】:
我目前使用 Rails.cache.fetch,cache_store 使用 redis-store gem(修改为使用 YAML 而不是正常编组)。现在,我有以下代码:
Rails.cache.fetch("foobar", expires_in: 1.week) do
User.all.to_a.each do |user|
user.email = "foobar"
end
end
这会将用户的 ruby 数组的 YAML 版本存储到单个键值中。我想有效地将这个列表分解为多个键,以便以后能够检索所有值而不是访问数据库。
我应该怎么做?我在考虑一个哈希列表,但它似乎效率不高,因为我仍然需要在列表中查找特定的哈希来更新一个用户。
【问题讨论】:
-
您能否详细说明为什么您认为不希望以给定方式保存所有用户?您改变方法的目标(指标)是什么?你需要什么来分解列表?您的问题没有说明限制和措施。
-
@PavelBulanov 基本上,从我在 Redis 上收集到的信息来看,这并不意味着将大量数据存储到一个字符串中。相反,它应该使用列表。 Redis-store 仅支持将所有内容编组为字符串,而不支持列表和哈希。我想使用 Redis 客户端手动缓存它,但不确定组织可能有数千个用户的数组的有效方法是什么。我需要能够通过属性查找任何用户,并通过 Redis 获取其余数据。
-
要深入回答,请提供有关您为什么要使用缓存的解释。你的读取查询是什么,为什么是 Redis 而不是常规数据库,你为什么要使用缓存(你的请求慢吗?哪一个?)。
-
通常情况下,如果您只需要单个用户(即每个对象读取和写入),为什么不使用常规数据库?你可以使用 redis 来缓存一些广泛使用的查询结果,例如前 10 名用户(不是每次都查询 DB)等
标签: ruby-on-rails ruby performance redis marshalling