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;
        }
  • 相关阅读:
    死锁是什么?如何避免死锁?
    HTTP协议 (二) 基本认证
    HTTP协议
    Fiddler 教程
    Wireshark基本介绍和学习TCP三次握手
    洛谷.4512.[模板]多项式除法(NTT)
    洛谷.4238.[模板]多项式求逆(NTT)
    洛谷.3803.[模板]多项式乘法(NTT)
    UOJ.87.mx的仙人掌(圆方树 虚树)(未AC)
    BZOJ.3991.[SDOI2015]寻宝游戏(思路 set)
  • 原文地址:https://www.cnblogs.com/zdd-java/p/9243576.html
Copyright © 2011-2022 走看看