From 1754fcccf75983c642497b78a6d8c2b3edb08964 Mon Sep 17 00:00:00 2001 From: Sam Date: Fri, 2 Oct 2015 15:00:51 +1000 Subject: [PATCH] PERF: instead of N redis operations perform in bulk --- app/services/random_topic_selector.rb | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/app/services/random_topic_selector.rb b/app/services/random_topic_selector.rb index d412a23890a..7486311cb6e 100644 --- a/app/services/random_topic_selector.rb +++ b/app/services/random_topic_selector.rb @@ -40,16 +40,18 @@ class RandomTopicSelector results = [] - left = count + return results if count < 1 - while left > 0 - id = $redis.lpop key - break unless id - - results << id.to_i - left -= 1 + results = $redis.multi do + $redis.lrange(key, 0, count-1) + $redis.ltrim(key, count, -1) end + results = results[0] + results.map!(&:to_i) + + left = count - results.length + backfilled = false if left > 0 ids = backfill(category)