mirror of
https://github.com/mperham/sidekiq.git
synced 2022-11-09 13:52:34 -05:00
Merge pull request #1277 from aackerman/api-deletion-support-memoization
Memoize size of a SortedSet to reduce calls to Redis when iterating
This commit is contained in:
commit
1b2343e9d9
1 changed files with 17 additions and 8 deletions
|
@ -257,6 +257,7 @@ module Sidekiq
|
|||
|
||||
def initialize(name)
|
||||
@zset = name
|
||||
@_size = size
|
||||
end
|
||||
|
||||
def size
|
||||
|
@ -270,14 +271,14 @@ module Sidekiq
|
|||
end
|
||||
|
||||
def each(&block)
|
||||
initial_size = size
|
||||
deleted_size = 0
|
||||
initial_size = @_size
|
||||
offset_size = 0
|
||||
page = -1
|
||||
page_size = 50
|
||||
|
||||
loop do
|
||||
range_start = page * page_size + deleted_size
|
||||
range_end = page * page_size + deleted_size + (page_size - 1)
|
||||
range_start = page * page_size + offset_size
|
||||
range_end = page * page_size + offset_size + (page_size - 1)
|
||||
elements = Sidekiq.redis do |conn|
|
||||
conn.zrange @zset, range_start, range_end, :with_scores => true
|
||||
end
|
||||
|
@ -286,7 +287,7 @@ module Sidekiq
|
|||
elements.each do |element, score|
|
||||
block.call SortedEntry.new(self, score, element)
|
||||
end
|
||||
deleted_size = initial_size - size
|
||||
offset_size = initial_size - @_size
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -320,13 +321,21 @@ module Sidekiq
|
|||
message = Sidekiq.load_json(element)
|
||||
|
||||
if message["jid"] == jid
|
||||
Sidekiq.redis { |conn| conn.zrem(@zset, element) }
|
||||
_, @_size = Sidekiq.redis do |conn|
|
||||
conn.multi do
|
||||
conn.zrem(@zset, element)
|
||||
conn.zcard @zset
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
elements_with_jid.count != 0
|
||||
else
|
||||
count = Sidekiq.redis do |conn|
|
||||
conn.zremrangebyscore(@zset, score, score)
|
||||
count, @_size = Sidekiq.redis do |conn|
|
||||
conn.multi do
|
||||
conn.zremrangebyscore(@zset, score, score)
|
||||
conn.zcard @zset
|
||||
end
|
||||
end
|
||||
count != 0
|
||||
end
|
||||
|
|
Loading…
Add table
Reference in a new issue