From 60b2b56d380c7cd3dc0ba54f4650cfdba568e38e Mon Sep 17 00:00:00 2001 From: "Akihiko Odaki (@fn_aki@pawoo.net)" Date: Thu, 29 Jun 2017 08:17:26 +0900 Subject: [PATCH] Reduce number of commands in FeedManager#trim (#3989) --- app/lib/feed_manager.rb | 4 +--- spec/lib/feed_manager_spec.rb | 13 +++++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb index 90a1441f2..c507f2636 100644 --- a/app/lib/feed_manager.rb +++ b/app/lib/feed_manager.rb @@ -38,9 +38,7 @@ class FeedManager end def trim(type, account_id) - return unless redis.zcard(key(type, account_id)) > FeedManager::MAX_ITEMS - last = redis.zrevrange(key(type, account_id), FeedManager::MAX_ITEMS - 1, FeedManager::MAX_ITEMS - 1) - redis.zremrangebyscore(key(type, account_id), '-inf', "(#{last.last}") + redis.zremrangebyrank(key(type, account_id), '0', (-(FeedManager::MAX_ITEMS + 1)).to_s) end def push_update_required?(timeline_type, account_id) diff --git a/spec/lib/feed_manager_spec.rb b/spec/lib/feed_manager_spec.rb index bf474c354..4bdc96866 100644 --- a/spec/lib/feed_manager_spec.rb +++ b/spec/lib/feed_manager_spec.rb @@ -131,4 +131,17 @@ RSpec.describe FeedManager do end end end + + describe '#push' do + it 'trims timelines if they will have more than FeedManager::MAX_ITEMS' do + account = Fabricate(:account) + status = Fabricate(:status) + members = FeedManager::MAX_ITEMS.times.map { |count| [count, count] } + Redis.current.zadd("feed:type:#{account.id}", members) + + FeedManager.instance.push('type', account, status) + + expect(Redis.current.zcard("feed:type:#{account.id}")).to eq FeedManager::MAX_ITEMS + end + end end