首页 > 解决方案 > 在 Redis 中使用特定模式获取键范围的最佳方法

问题描述

我使用 Redis,但我需要从 Redis 获取密钥的最佳方法。

我需要按日期范围(2020-06-01 到 2020-06-20)搜索每个 company_id (id 是唯一的)

键示例 stat:company:2:date:2020-06-13

我认为要解决问题,我每天都会得到钥匙,但如果需要 200 把钥匙。

这需要很多次,我在 display user 之前做了一些有价值的操作。

我尝试使用scan&keys

环境Ruby 2.7.0Ruby on Rails 6.0.3 Redis

标签: ruby-on-railsrubyredis

解决方案


为了节省到 redis 的往返次数,您可以使用mget一次获取多个密钥,如果只有大约 200 个密钥 - 您甚至可以一次调用完成:

require 'date'
company_ids = [:a, :b, :c]
today = Date.today

#generate your keys:
keys = company_ids.map{|cid| (1..20).map{|day| [cid, day]} }.flatten(1).map{|cid,day| "stat:company:#{cid}:date:#{today - day}" }

hash = keys.zip(redis.mget(*keys)).to_h

推荐阅读