• 【原】Redis实现生成自增流水号


    场景:

          公司内部有个业务场景是后台审核之后需要生成一个流水号,规则是: 201807280001,201807280002,201807280003,后面四位依次递增,前面年月日取当前时间并且转换成yyyymmdd格式。

          于是想到redis比较适合做这种,而且因为是基于内存操作,速度比较快,不占用数据库资源,于是通过搜集整理出代码如下:

        @Override
        public String generate(String bizCode) {
            //** 获取今天的日期:yyyyMMdd *//*
            String date = com.i2p.util.DateUtils.getCurentDate();
            String key = "serial.number:" + date;
            //** 自增 *//*
            long sequence = this.incr(key);
            String seq = SequenceUtils.getSequence(sequence);
            StringBuilder sb = new StringBuilder();
            sb.append(bizCode).append(seq);
            String serial = sb.toString();
            return serial;
        }
    
    package com.i2p.util;
    
    public class SequenceUtils {
    
        static final int DEFAULT_LENGTH = 4;
        public static String getSequence(long seq) {
            String str = String.valueOf(seq);
            int len = str.length();
            if (len >= DEFAULT_LENGTH) {// 取决于业务规模,应该不会到达4
                return str;
            }
            int rest = DEFAULT_LENGTH - len;
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < rest; i++) {
                sb.append('0');
            }
            sb.append(str);
            return sb.toString();
        }
    }
    /**
         * 得到系统当前日期
         * "yyyyMMdd"
         */
        public static String getCurentDate() {
            SimpleDateFormat tempDate = new SimpleDateFormat("yyyyMMdd");
            String datetime = tempDate.format(new java.util.Date());
            return datetime;
        }
  • 相关阅读:
    Hexo命令无法找到 -问题修复
    技术的本质
    java 多线程总结篇4——锁机制
    java 多线程总结篇3之——生命周期和线程同步
    java 多线程总结篇2之——Thread类及常用函数
    java 多线程总结篇1之——基本概念
    java IO流的继承体系和装饰类应用
    java IO流知识点总结
    java IO流之——File类知识总结和面试
    为什么需要学UML建模
  • 原文地址:https://www.cnblogs.com/zdd-java/p/9243576.html
Copyright © 2020-2023  润新知