Redis设计超时时间

	Result result = new Result();
		boolean isLimit = LimitVisitTimeUtil.limitVisit(WTOIP_YUN_APP_PORTAL_WEEKDAY_NOTE_NOTIFY,"1",7,TimeUnit.DAYS);
		if (isLimit){
			result.setCode(1);
			result.setMessage("每周只能发一次短信");
			result.setObject(0);
			return result;
		}
 /**
     * 通过key 设置访问次数限制
     * @param key
     * @param num 限制次数
     * @param timeout 间隔时长
     * @param unit 时间单位
     * @return
     */
    public static boolean limitVisit(String key,String num,long timeout, TimeUnit unit){
        if (StringUtils.isBlank(key)){
            logger.error("redis key 为空,设置访问次数限制失败");
            return false;
        }
        try {
            //限制用户提交次数
            String numStr = stringRedisTemplate.opsForValue().get(key);
            if (unit == TimeUnit.MINUTES){
                timeout = timeout * 60;
            }else if (unit == TimeUnit.HOURS){
                timeout = timeout * 60 * 60;
            }else if (unit == TimeUnit.DAYS){
                timeout = timeout * 60 * 60 * 24;
            }
            //第一次访问不进行减一,所以num最小值为1
            if (StringUtils.isBlank(numStr)){
                stringRedisTemplate.opsForValue().set(key,num,timeout,TimeUnit.SECONDS);
            }else {
                int num_ = Integer.parseInt(numStr);
                num_--;
                if (num_ <= 0){
                    return true;
                }
                stringRedisTemplate.opsForValue().set(key,num_+"",stringRedisTemplate.getExpire(key,TimeUnit.SECONDS),TimeUnit.SECONDS);
            }
        }catch (Exception e){
            logger.error("设置默认访问次数失败,key : {},报错:{}",key,e);
        }
        return false;
    }

 

你可能感兴趣的:(Redis)