module RedisPage::Sweeper

Public Class Methods

sweep(info, queue) click to toggle source
# File lib/redis_page/sweeper.rb, line 58
def self.sweep(info, queue)
  Rails.logger.info "[page cache]add sweeper job: #{info['url']}-#{info['country']}"

  Sidekiq::Client.push('queue' => queue, 'class' => SweeperWorker, 'args' => [info['url'], info['country']])
end

Public Instance Methods

add_clazz_infos(urls) click to toggle source
# File lib/redis_page/sweeper.rb, line 42
def add_clazz_infos(urls)
  key = "c:#{self.class.table_name}"
  Rails.logger.info "[page cache]invalidate: #{key}"
  RedisPage.cache_relation_redis.smembers(key).each do |info|
    RedisPage.cache_relation_redis.srem(key, info)
    add_infos(urls, info)
  end
end
add_infos(urls, info) click to toggle source
# File lib/redis_page/sweeper.rb, line 36
def add_infos(urls, info)
  info = JSON.parse(info)
  key = "#{info['url']}-#{info['country']}"
  urls[key] = info unless urls[key]
end
fetch_infos(urls) click to toggle source
# File lib/redis_page/sweeper.rb, line 51
def fetch_infos(urls)
  urls.values.each do |info|
    RedisPage::Sweeper.sweep(info, redis_page_queue_name)
  end
end
invalidate_clazz_cache() click to toggle source
# File lib/redis_page/sweeper.rb, line 24
def invalidate_clazz_cache
  urls = {}
  add_clazz_infos(urls)
  fetch_infos(urls)
end
invalidate_instance_cache() click to toggle source
# File lib/redis_page/sweeper.rb, line 12
def invalidate_instance_cache
  urls = {}
  key = "i:#{self.class.table_name}:#{self.id}"
  Rails.logger.info "[page cache]invalidate: #{key}"
  RedisPage.cache_relation_redis.smembers(key).each do |info|
    RedisPage.cache_relation_redis.srem(key, info)
    add_infos(urls, info)
  end
  add_clazz_infos(urls)
  fetch_infos(urls)
end
redis_page_queue_name() click to toggle source

通过覆写此方法, 达到可以指定redis_page queue的目的

# File lib/redis_page/sweeper.rb, line 31
def redis_page_queue_name
  'redis_page'
end