您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    了解Snowflake算法的完成原理(7)
    时间:2020-08-10 21:30 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

            String value = HIGH + timestampString + workerIdString + dataCenterIdString + seqString; 

            long num = Long.parseLong(value, 2); 

            System.out.println(num);   // 某个时辰输入为3125927076831231 

        } 

     

        private static String leftPadding(String value, int maxLength) { 

            int diff = maxLength - value.length(); 

            StringBuilder builder = new StringBuilder(); 

            for (int i = 0; i < diff; i++) { 

                builder.append("0"); 

            } 

            builder.append(value); 

            return builder.toString(); 

        } 

    然后把代码标准一下,编写出一个简版 Snowflake 算法完成的工程化代码:

    // 主键生成器接口 

    public interface PrimaryKeyGenerator { 

     

        long generate(); 

     

    // 简易Snowflake完成 

    public class SimpleSnowflake implements PrimaryKeyGenerator { 

     

        private static final String HIGH = "0"

        private static final long MAX_WORKER_ID = 31; 

        private static final long MIN_WORKER_ID = 0; 

     

        private static final long MAX_DC_ID = 31; 

        private static final long MIN_DC_ID = 0; 

     

        private static final long MAX_SEQUENCE = 4095; 

     

        /** 

         * 机器ID 

         */ 

        private final long workerId; 

     

        /** 

         * 数据中心ID 

         */ 

        private final long dataCenterId; 

     

        /** 

         * 基准纪元值 

         */ 

        private final long epoch; 

     

        private long sequence = 0L; 

        private long lastTimestamp = -1L; 

     

        public SimpleSnowflake(long workerId, long dataCenterId, long epoch) { 

            this.workerId = workerId; 

            this.dataCenterId = dataCenterId; 

            this.epoch = epoch; 

            checkArgs(); 

        } 

     

        private void checkArgs() { 

            if (!(MIN_WORKER_ID <= workerId && workerId <= MAX_WORKER_ID)) { 

    (责任编辑:admin)