> 文档中心 > 限定当天的可用次数 redis

限定当天的可用次数 redis

有一个场景: 比如我生成二维码 然后我不能一直让他生成 要做限定次数

解决思路 redis 记录一天生成次数 如果超过了就不让他生成 

代码实现:

  /**工具类注入bean     * @author zhangjunrong     * @date 2022/2/22 19:30     */    @Autowired    private RedisUtil redisUtil;    private static ConvenientUtil convenientUtil ;    @PostConstruct    public void init() { convenientUtil = this; convenientUtil.redisUtil= this.redisUtil;    }  /**      *计数当前时间到当天最后时间 的间隔时间差      * @param unit 计数时间类型 DateUnit.SECOND 秒      * @return long      * @author zhangjunrong      * @date 2022/5/11 18:37      */    public static long countEndTime(DateUnit unit){ DateTime time = DateUtil.date(); Date beginOfDay = DateUtil.endOfDay(time); long betweenDay = DateUtil.between(time, beginOfDay, unit); return betweenDay;    }/**      *次数限定 递增      * @param redisKey      * @param number      * @return void      * @author zhangjunrong      * @date 2022/5/11 13:55      */    public static void limitedNumber(String redisKey,Integer number){ //为了防止并发和重复 使用递增 //如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作 //限制次数 当天为期限 不可超过 number次 Integer useNumber = (Integer) convenientUtil.redisUtil.get(redisKey); if (ObjectUtil.isEmpty(useNumber)){     //如果为空 则直接放置数量一     convenientUtil.redisUtil.incr(redisKey,SystemConstant.NUM_ONE);     //设置有效期当天有效     convenientUtil.redisUtil.expire(redisKey,countEndTime(DateUnit.SECOND)); }else {     //获取已发送次数     //发送次数大于number次 当天内停止在发验证码     if (useNumber>=number) {  throw new YqsException(MessageEnum.AUTH_CODE_ERR.getCode(), "使用次数已用完");     }else {  //redis已存在 则++size  convenientUtil.redisUtil.incr(redisKey,SystemConstant.NUM_ONE);  //设置有效期当天有效  convenientUtil.redisUtil.expire(redisKey,countEndTime(DateUnit.SECOND));     } }    }

结果:

我们限定他一天只可用20次

 

K歌软件