精华内容
下载资源
问答
  • UUID(UniversallyUniqueIdentifier)全局唯一标识符,是指在一台机器上生成的...由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同...

    UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长。 在Java中生成UUID主要有以下几种方式: JDK1.5 如果使用的JDK1.5的话,那么生成UUID变成了一件简单的事,以为JDK实现了UUID: java.util.UUID,直接调用即可. UUID uuid  =  UUID.randomUUID(); String s = UUID.randomUUID().toString();//用来生成数据库的主键id非常不错。。   UUID是由一个十六位的数字组成,表现出来的形式例如 550E8400-E29B-11D4-A716-446655440000

    //下面就是实现为数据库获取一个唯一的主键id的工具类

    copycode.gifpackage com.cn.util;import java.util.UUID;public class UuidUtil {    public static String get32UUID() {

    String uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");        return uuid;

    }

    public static void main(String[] args) {

    System.out.println(get32UUID());

    }

    }

    copycode.gif

    展开全文
  • UUID(UniversallyUniqueIdentifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是...由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后...

    UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长。 
    Java中生成UUID主要有以下几种方式: 

    JDK1.5 
    如果使用的JDK1.5的话,那么生成UUID变成了一件简单的事,以为JDK实现了UUID: 
    java.util.UUID,直接调用即可. 
    UUID uuid  =  UUID.randomUUID(); 
    String s = UUID.randomUUID().toString();//用来生成数据库的主键id非常不错。。   

    UUID是由一个十六位的数字组成,表现出来的形式例如 
    550E8400-E29B-11D4-A716-446655440000   

     

    //下面就是实现为数据库获取一个唯一的主键id的工具类

    
    

    }

    本文转自杨海龙的博客博客51CTO博客,原文链接http://blog.51cto.com/7218743/1906823如需转载请自行联系原作者


    IT达仁

    展开全文
  • 有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的SnowFlake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cassandra没有顺序ID生成机...

    分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。

    有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。

    而twitter的SnowFlake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cassandra没有顺序ID生成机制,所以开发了这样一套全局唯一ID生成服务。

    原理

    Twitter的雪花算法SnowFlake,使用Java语言实现。

    SnowFlake算法产生的ID是一个64位的整型,结构如下(每一部分用“-”符号分隔):

    0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000

    1位标识部分,在java中由于long的最高位是符号位,正数是0,负数是1,一般生成的ID为正数,所以为0;

    41位时间戳部分,这个是毫秒级的时间,一般实现上不会存储当前的时间戳,而是时间戳的差值(当前时间-固定的开始时间),这样可以使产生的ID从更小值开始;41位的时间戳可以使用69年,(1L << 41) / (1000L 60 60 24 365) = 69年;

    10位节点部分,Twitter实现中使用前5位作为数据中心标识,后5位作为机器标识,可以部署1024个节点;

    12位序列号部分,支持同一毫秒内同一个节点可以生成4096个ID;

    SnowFlake算法生成的ID大致上是按照时间递增的,用在分布式系统中时,需要注意数据中心标识和机器标识必须唯一,这样就能保证每个节点生成的ID都是唯一的。或许我们不一定都需要像上面那样使用5位作为数据中心标识,5位作为机器标识,可以根据我们业务的需要,灵活分配节点部分,如:若不需要数据中心,完全可以使用全部10位作为机器标识;若数据中心不多,也可以只使用3位作为数据中心,7位作为机器标识。

    snowflake生成的ID整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和workerId作区分),并且效率较高。据说:snowflake每秒能够产生26万个ID。

    源码

    本机实测:100万个ID 耗时5秒

    /**

    * 描述: Twitter的分布式自增ID雪花算法snowflake (Java版)

    * https://github.com/souyunku/SnowFlake

    *

    * @author yanpenglei

    * @create 2018-03-13 12:37

    **/

    public class SnowFlake {

    /**

    * 起始的时间戳

    */

    private final static long START_STMP = 1480166465631L;

    /**

    * 每一部分占用的位数

    */

    private final static long SEQUENCE_BIT = 12; //序列号占用的位数

    private final static long MACHINE_BIT = 5; //机器标识占用的位数

    private final static long DATACENTER_BIT = 5;//数据中心占用的位数

    /**

    * 每一部分的最大值

    */

    private final static long MAX_DATACENTER_NUM = -1L ^ (-1L << DATACENTER_BIT);

    private final static long MAX_MACHINE_NUM = -1L ^ (-1L << MACHINE_BIT);

    private final static long MAX_SEQUENCE = -1L ^ (-1L << SEQUENCE_BIT);

    /**

    * 每一部分向左的位移

    */

    private final static long MACHINE_LEFT = SEQUENCE_BIT;

    private final static long DATACENTER_LEFT = SEQUENCE_BIT + MACHINE_BIT;

    private final static long TIMESTMP_LEFT = DATACENTER_LEFT + DATACENTER_BIT;

    private long datacenterId; //数据中心

    private long machineId; //机器标识

    private long sequence = 0L; //序列号

    private long lastStmp = -1L;//上一次时间戳

    public SnowFlake(long datacenterId, long machineId) {

    if (datacenterId > MAX_DATACENTER_NUM || datacenterId < 0) {

    throw new IllegalArgumentException("datacenterId can't be greater than MAX_DATACENTER_NUM or less than 0");

    }

    if (machineId > MAX_MACHINE_NUM || machineId < 0) {

    throw new IllegalArgumentException("machineId can't be greater than MAX_MACHINE_NUM or less than 0");

    }

    this.datacenterId = datacenterId;

    this.machineId = machineId;

    }

    /**

    * 产生下一个ID

    *

    * @return

    */

    public synchronized long nextId() {

    long currStmp = getNewstmp();

    if (currStmp < lastStmp) {

    throw new RuntimeException("Clock moved backwards. Refusing to generate id");

    }

    if (currStmp == lastStmp) {

    //相同毫秒内,序列号自增

    sequence = (sequence + 1) & MAX_SEQUENCE;

    //同一毫秒的序列数已经达到最大

    if (sequence == 0L) {

    currStmp = getNextMill();

    }

    } else {

    //不同毫秒内,序列号置为0

    sequence = 0L;

    }

    lastStmp = currStmp;

    return (currStmp - START_STMP) << TIMESTMP_LEFT //时间戳部分

    | datacenterId << DATACENTER_LEFT //数据中心部分

    | machineId << MACHINE_LEFT //机器标识部分

    | sequence; //序列号部分

    }

    private long getNextMill() {

    long mill = getNewstmp();

    while (mill <= lastStmp) {

    mill = getNewstmp();

    }

    return mill;

    }

    private long getNewstmp() {

    return System.currentTimeMillis();

    }

    public static void main(String[] args) {

    SnowFlake snowFlake = new SnowFlake(2, 3);

    long start = System.currentTimeMillis();

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

    System.out.println(snowFlake.nextId());

    }

    System.out.println(System.currentTimeMillis() - start);

    }

    }

    循环生成的ID,运行结果如下:

    170916032679263329

    170916032679263330

    170916032679263331

    170916032679263332

    170916032679263333

    170916032679263334

    170916032679263335

    170916032679263336

    170916032679263337

    170916032679263338

    170916032679263339

    170916032679263340

    170916032679263341

    170916032679263342

    开源地址

    推荐阅读

    Spring Cloud 系列教程

    Spring Boot 系列教程

    源码 + 教程

    Docker 容器

    环境搭建

    Contact

    作者:鹏磊

    版权归作者所有,转载请注明出处

    Wechat:关注公众号,搜云库,专注于开发技术的研究与知识分享

    展开全文
  • 2020年给自己定制了学习计划,现在按照计划慢慢去学习,由于平时要上班,所以大部分都是利用晚上下班和周末时间来学习,并写成文章,一来可以使自己加强学习时的探索,也是为了以后能翻过来看看,二来就是给更多想...

    d287160ddd5507404020a062216d7040.png
    2020年给自己定制了学习计划,现在按照计划慢慢去学习,由于平时要上班,所以大部分都是利用晚上下班和周末时间来学习,并写成文章,一来可以使自己加强学习时的探索,也是为了以后能翻过来看看,二来就是给更多想学习技术的同学分享及交流,共同进步!

    下面我把关于MybatisPlus的文章做个列表:

    基础篇

    1.MybatisPlus基础篇学习笔记(一)------简介

    2.MybatisPlus基础篇学习笔记(二)------Springboot中引入MP并配置

    3.MybatisPlus基础篇学习笔记(三)------基本使用

    4.MybatisPlus基础篇学习笔记(四)------查询方法

    5.MybatisPlus基础篇学习笔记(五)------自定义sql及分页查询

    6.MybatisPlus基础篇学习笔记(六)------更新及删除

    7.MybatisPlus基础篇学习笔记(七)------AR模式、主键策略和基本配置

    8.MybatisPlus基础篇学习笔记(八)------通用service

    9.MybatisPlus基础篇学习笔记(九)------MybatisPlus代码生成器(即取即用)

    进阶篇

    1.MybatisPlus进阶篇学习笔记(一)------高级功能介绍及项目搭建准备

    2.MybatisPlus进阶篇学习笔记(二)------逻辑删除

    3.MybatisPlus进阶篇学习笔记(三)------自动填充

    4.MybatisPlus进阶篇学习笔记(四)------乐观锁

    5.MybatisPlus进阶篇学习笔记(五)------性能分析

    6.MybatisPlus进阶篇学习笔记(六)------多租户

    7.MybatisPlus进阶篇学习笔记(七)------动态表

    8.MybatisPlus进阶篇学习笔记(八)------SQL注入器

    545d616fb71ed5e119c186c8a865ee77.png


    小程序码【兜里的猫】

    欢迎访问博客网页版:

    兜里的猫www.wldeer.com
    10e5f9cdcbae09c232082f698d0ef885.png
    展开全文
  • 最近项目遇到一个坑,就是server和db之间存在时区问题,本人的db是utc时间,可以使用代码设置时区来解决,本人这里使用joda三方包,joda蛮好用的,具体用法这里不详细描述。先引入pomjoda-timejoda-time2.10.1下面...
  • java时间格式大全(算法源码) java,date,时间,时间格式,算法源码 * * @return */ public static String getTimeShort() { SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss"); Date currentTime...
  • java源码包---java 源码 大量 实例

    千次下载 热门讨论 2013-04-18 23:15:26
    util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码加以...
  • 索引数据库只两件事情:存储数据、检索数据。而索引是在你存储的数据之外,额外保存一些路标(一般是B+树),以减少检索数据的时间。所以索引是主数据衍生的附加结构。一张表可以建立任意多个索引,每个索引可以是...
  • java源码包2

    千次下载 热门讨论 2013-04-20 11:28:17
    util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码加以...
  • java集合总结

    2019-03-08 16:08:46
    画了点时间,给Java集合了个思维导图,其中,有1.8之前和1.8的对比。 1. 思维导图 严肃一下! 1.《国家地理》里说地球上最深的地方在太平洋的马里亚纳海沟,2016年拍了一组照片回来。最近科学家研究这些照片,发....
  • java源码包3

    千次下载 热门讨论 2013-04-20 11:30:13
    util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码加以...
  • java源码包4

    千次下载 热门讨论 2013-04-20 11:31:44
    util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码加以...
  • 为调试代码暂时不抽象。以后修改为抽象方法,各子类应自己实现。 * @author slx * @date 2009-6-12 上午09:15:11 * @modifyNote * @return */ @Enumerated public String myPk(){ return ...
  • java面试题

    2018-04-27 19:55:38
    答:int是java的原始数据类型,Integer是java为int提供的封装类,java为每个原始数据类型都提供了封装类。 String和StringBuffer的区别? 答:String是不可变的对象,每次对String类型进行改变都相当于产生了一个新...
  • java序列化

    2018-04-07 14:33:23
    前端时间做项目的时候,遇到一个需求就是需要定时去扫描一张表,并且将没有扫描过的数据在另一张表中进行操作,所以需要记住上一次扫描的主键ID,并且在重启服务后能不丢失。于是想到了序列化,但是没弄好,就采用了...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
    util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码加以...
  • 表结构设计t_sequence字段描述ID数据库主键SEQ_PREFIX生成的主键前缀SEQ_TYPE生成的主键类型SEQ_NUM生成的主键的最新序号SEQ_GEN_DATE主键最新更新时间SEQ_CATEGORY主键分类SEQ_CHAR_WIDTH主键数字部分的最大宽度, ...
  • util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码加以...
  • autocode中文java

    2010-04-14 08:47:00
    符合J2EE的MVC开发模式结合工厂模式,展示、业务、逻辑、存储的分层实现,代码的编写已分门归类,重要体现了\"桥归桥,路归路\"的理念,这样对任何需要尽快熟悉项目的人员,一定可以在短时间内理解项目的架构思想,...
  • public void write(uers u){// do something}但是有一种情况(1%的情况下吧)的就是有的用户会发两次甚至更多次写请求(因为数据库限制,我们不方便在主键文章)。如果这个特殊的用户发送的两次请求时间间隔比较大,那...
  • public void write(Uers u){// do something}但是有一种情况(1%的情况下吧)的就是有的用户会发两次甚至更多次写请求(因为数据库限制,我们不方便在主键文章)。如果这个特殊的用户发送的两次请求时间间隔比较大,那...
  • public void write(Uers u){// do something}但是有一种情况(1%的情况下吧)的就是有的用户会发两次甚至更多次写请求(因为数据库限制,我们不方便在主键文章)。如果这个特殊的用户发送的两次请求时间间隔比较大,那...
  • 对于商城订餐等的互联网项目的订单编号,可优先选择使用数字来订单编号主键。 因为数据库来说,索引查找性能更好。 然而,你也可以使用UUID来进行生成,对于数量量不大,并发小的小项目都可以适用。 下面是生成的...
  • 某公司Java实习生面试题整合

    千次阅读 2018-03-01 11:37:39
    昨天面试了某公司的Java实习生岗位,感觉是GG了。... 创建一张User表,字段为Id(自增主键),name(不能为空),createTime(创建时间),sex(创建时间),idCard(身份证,唯一),age(年龄),score(分数)2...
  • util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码加以...

空空如也

空空如也

1 2 3 4 5
收藏数 83
精华内容 33
关键字:

java时间做主键

java 订阅