|
|
|
@@ -0,0 +1,66 @@ |
|
|
|
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 |