zoukankan      html  css  js  c++  java
  • redis的key设置每天凌晨过期的思路

    设置key凌晨过期的思路

    1. 设置key的值的时候,计算下当前时间到第二天凌晨的时间差,设置key的过期时间。
    2. 利用定时任务,每天凌晨将需要过期的key删除。

    应用场景

    1. 按天为维度,限制用户对资源的访问次数。
    2. 按天为维度,生成递增序列号。

    代码示例

        /**
         * 按用户id和天为维度生成递增的单号
         *
         * @return 
         */
       private String createNo(Integer userId) {
            StringBuilder sb = new StringBuilder();
            String dateStr = DateUtils.getDateForFormat(new Date(), "yyyyMMdd");
            sb.append("P").append(dateStr).append(userId);
            String keyPrefix = sb.toString();
            long keySuffix = jedis.incr(keyPrefix);
            if (keySuffix > Constant.NO_MAXVALUE_999) {
                log.error("生成单号失败,序号大于999,userId:" + userId);
                throw new RuntimeException("生成预约单号失败,序号大于999");
            }
            Long expiresTime = getSecondsNextEarlyMorning();
            jedis.setExpire(keyPrefix, expiresTime.intValue());
            String keySuffixStr = String.format("%03d", keySuffix);
            return keyPrefix + keySuffixStr;
        }
        
        /**
         * 判断当前时间距离第二天凌晨的秒数
         *
         * @return 返回值单位为[s:秒]
         */
        public Long getSecondsNextEarlyMorning() {
            Calendar cal = Calendar.getInstance();
            cal.add(Calendar.DAY_OF_YEAR, 1);
            cal.set(Calendar.HOUR_OF_DAY, 0);
            cal.set(Calendar.SECOND, 0);
            cal.set(Calendar.MINUTE, 0);
            cal.set(Calendar.MILLISECOND, 0);
            return (cal.getTimeInMillis() - System.currentTimeMillis()) / 1000;
        }
  • 相关阅读:
    Delphi stdCall意义
    Delphi 与 DirectX 之 DelphiX(10): TPictureCollectionItem.StretchDraw
    delphi中的TCollection
    Delphi XE5教程8:使用Delphi命名空间
    在 centos 系统中添加审计用户并利用 sudoers 进行权限控制
    在 centos 8 中添加 sudoer 用户
    React.Fragment
    js保留两位小数方法总结
    正则表达式的() [] {} 的区别
    Typora如何配置gitee图床
  • 原文地址:https://www.cnblogs.com/luao/p/10827939.html
Copyright © 2011-2022 走看看