66 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
class LimitForbidControl::Base
 | 
						|
  def initialize
 | 
						|
  end
 | 
						|
 | 
						|
  def cache_key
 | 
						|
    raise 'Please overwrite method :cache_Key'
 | 
						|
  end
 | 
						|
 | 
						|
  def forbid_cache_key
 | 
						|
    "#{cache_key}:forbid"
 | 
						|
  end
 | 
						|
 | 
						|
  def allow_times
 | 
						|
    5
 | 
						|
  end
 | 
						|
 | 
						|
  def cumulative_expires
 | 
						|
    1.days
 | 
						|
  end
 | 
						|
 | 
						|
  def forbid_expires
 | 
						|
    1.hours
 | 
						|
  end
 | 
						|
 | 
						|
  def forbid?
 | 
						|
    Rails.cache.read(forbid_cache_key)
 | 
						|
  end
 | 
						|
 | 
						|
  def increment!
 | 
						|
    value = Rails.cache.read(cache_key)
 | 
						|
    value = value.to_i + 1
 | 
						|
 | 
						|
    # 锁定
 | 
						|
    if value >= allow_times.to_i
 | 
						|
      Rails.logger.info("[LimitForbidControl] Lock #{cache_key}")
 | 
						|
      Rails.cache.write(forbid_cache_key, true, expires_in: forbid_expires)
 | 
						|
      Rails.cache.delete(cache_key)
 | 
						|
    else
 | 
						|
      Rails.cache.write(cache_key, value, expires_in: cumulative_expires)
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def error_times
 | 
						|
    Rails.cache.read(cache_key).to_i
 | 
						|
  end
 | 
						|
 | 
						|
  def remain_times
 | 
						|
    allow_times.to_i - error_times
 | 
						|
  end
 | 
						|
 | 
						|
  def clear
 | 
						|
    Rails.logger.info("[LimitForbidControl] Clear #{cache_key}")
 | 
						|
    Rails.cache.delete(forbid_cache_key)
 | 
						|
    Rails.cache.delete(cache_key)
 | 
						|
  end
 | 
						|
 | 
						|
  private
 | 
						|
 | 
						|
  def redis_cache?
 | 
						|
    Rails.cache.is_a?(ActiveSupport::Cache::RedisStore)
 | 
						|
  end
 | 
						|
 | 
						|
  def day
 | 
						|
    Time.current.strftime('%Y%m%d')
 | 
						|
  end
 | 
						|
end |