也许这是一个代码审查的问题,但我认为它最适合这里。让我知道它是否需要移动。
我使用 Redis 作为 Sinatra 应用程序中某些数据的长期缓存。我正在遍历 Redis 中的所有键,提取它们的数据,并用 JSON 解析它。这需要相当多的时间。这是基准:
[13] pry(main)> Benchmark.measure do
[13] pry(main)* dkeys = redis.keys.delete_if {|e| e == "last_run"}
[13] pry(main)* @delayed = dkeys.map {|k| {k => JSON.parse(redis.get(k))}}
[13] pry(main)* end
=> 0.520000 0.160000 0.680000 (132.410716)
[14] pry(main)> @delayed.count
=> 1358
[15] pry(main)>
延迟很明显,我认为延迟是调用redis 1300+次的成本。
有没有一种方法可以将所有数据从 redis 提取到一个对象中,这样我就不必在迭代的每一步都调用它?