Class: Sidekiq::SortedSet
- Inherits:
-
Object
- Object
- Sidekiq::SortedSet
- Includes:
- Enumerable
- Defined in:
- lib/sidekiq/api.rb
Direct Known Subclasses
Instance Method Summary collapse
- #clear ⇒ Object
- #delete(score, jid = nil) ⇒ Object
- #each(&block) ⇒ Object
- #fetch(score, jid = nil) ⇒ Object
-
#initialize(name) ⇒ SortedSet
constructor
A new instance of SortedSet.
- #size ⇒ Object
Constructor Details
#initialize(name) ⇒ SortedSet
Returns a new instance of SortedSet.
222 223 224 |
# File 'lib/sidekiq/api.rb', line 222 def initialize(name) @zset = name end |
Instance Method Details
#clear ⇒ Object
285 286 287 288 289 |
# File 'lib/sidekiq/api.rb', line 285 def clear Sidekiq.redis do |conn| conn.del(@zset) end end |
#delete(score, jid = nil) ⇒ Object
263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 |
# File 'lib/sidekiq/api.rb', line 263 def delete(score, jid = nil) if jid elements = Sidekiq.redis do |conn| conn.zrangebyscore(@zset, score, score) end elements_with_jid = elements.map do |element| = Sidekiq.load_json(element) if ["jid"] == jid Sidekiq.redis { |conn| conn.zrem(@zset, element) } end end elements_with_jid.count != 0 else count = Sidekiq.redis do |conn| conn.zremrangebyscore(@zset, score, score) end count != 0 end end |
#each(&block) ⇒ Object
230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 |
# File 'lib/sidekiq/api.rb', line 230 def each(&block) # page thru the sorted set backwards so deleting entries doesn't screw up indexing page = -1 page_size = 50 loop do elements = Sidekiq.redis do |conn| conn.zrange @zset, page * page_size, (page * page_size) + (page_size - 1), :with_scores => true end break if elements.empty? page -= 1 elements.each do |element, score| block.call SortedEntry.new(self, score, element) end end end |
#fetch(score, jid = nil) ⇒ Object
247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 |
# File 'lib/sidekiq/api.rb', line 247 def fetch(score, jid = nil) elements = Sidekiq.redis do |conn| conn.zrangebyscore(@zset, score, score) end elements.inject([]) do |result, element| entry = SortedEntry.new(self, score, element) if jid result << entry if entry.jid == jid else result << entry end result end end |