zoukankan      html  css  js  c++  java
  • 【原】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;
        }
  • 相关阅读:
    mysql数据库表中判断字段是否存在,如果不存在则创建该字段
    PHP同时操作两个mysql数据库
    Bootstrap-分页插件Paginator
    NLP--自然语言处理与机器学习会议
    对CURL的一些研究
    Nginx完整配置说明
    SecureCRT自动登陆到服务器的脚本以及脚本编写简单说明
    Fast CGI 工作原理
    FastCGI中文规范
    Linux +apache+fastcgi运行c/c++
  • 原文地址:https://www.cnblogs.com/zdd-java/p/9243576.html
Copyright © 2011-2022 走看看