zoukankan      html  css  js  c++  java
  • 使用Redis 计数器防止刷接口

            业务需求中经常有需要用到计数器的场景:为了防止恶意刷接口,需要设置一个接口每个IP一分钟、一天等的调用次数阈值;为了降低费用,限制发送短信的次数等。使用Redis的Incr自增命令可以轻松实现以上需求,而且避免验证码带来的弊端,如不够人性化,用户操作时间长、体验差等。以一个接口每个IP每分钟限制调用100次为例:

        private boolean isDenied(String ip){

             SimpleDateFormat sdf = new SimpleDateFormat("YYYYMMDDHHmm");
             String time = sdf.format(Calendar.getInstance().getTime());

             long count=JedisUtil.setIncr(time +"_"+ip+"_IP", 86400);

           if(count<=100){
                return false;
            }
            return true;
        }
    public class JedisUtil {
        protected final static Logger logger = Logger.getLogger(JedisUtil.class);
        private static  JedisPool jedisPool;
        
        @Autowired(required = true)
        public void setJedisPool(JedisPool jedisPool) {
            JedisUtil.jedisPool = jedisPool;
        }
        /**
         * 对某个键的值自增
         * @author liboyi
         * @param key 键
         * @param cacheSeconds 超时时间,0为不超时
         * @return
         */
        public static long setIncr(String key, int cacheSeconds) {
            long result = 0;
            Jedis jedis = null;
            try {
                jedis = jedisPool.getResource();
                result =jedis.incr(key);
                if (cacheSeconds != 0) {
                 jedis.expire(key, cacheSeconds);
                }
                logger.debug("set "+ key + " = " + result);
            } catch (Exception e) {
                logger.warn("set "+ key + " = " + result);
            } finally {
                jedisPool.returnResource(jedis);
            }
            return result;
        }
    }    

    参考文献:https://blog.csdn.net/qq_33556185/article/details/79427271

  • 相关阅读:
    java中Objenesis库简单使用
    java魔法类之ReflectionFactory介绍
    求与一个数最接近的2的N次幂
    java魔法类之Unsafe介绍
    java中如何通过程序检测线程死锁
    jQuery.fullpage自定义高度(demo详解)
    angular diretive中 compile controller link的区分及编译顺序
    div水平垂直居中的几种方法(面试问题)
    angular 双ng-repeat显示隐藏
    快速应用rem
  • 原文地址:https://www.cnblogs.com/east7/p/10013578.html
Copyright © 2011-2022 走看看