唯一ID

一个短的唯一id生成方法,解决uuid过长的问题

爱⌒轻易说出口 提交于 2020-04-06 21:54:00
前言:最近,在做用redis存储用户消息的时候,采用的结构如下: Key value Msg+userId+time 消息内容 但是如果在同一时间里面,有很多人并发发送了消息给用户怎么办呢?也就是说只是在key后面加时间 我的时间格式是yyyy-MM-ddHH:mm:ss,这样子万一有重复key怎么办,消息就会被覆盖了 于是想到在后面加uuid,但是uuid有30多位啊,我只需要简单的短的一个避免重复的id就可以了。 于是写了下面代码,并做了测试,发现在100次,每次生成10万条的情况下,都没有重复,这里没有测试100万,1000万条,因为我觉得如果你需要在这种极端情况下的话,你还是需要使用长的uuid的。 下面是8位的短id,基本可以抵抗10万条重复,如果需要9位,11位,16位的,可以如法炮制 public static void main(String args[]){ byte []bytes=new byte[8]; Random random=new Random(); HashSet<String>hash=new HashSet<>(); for(int j=0;j<100;j++) { hash.clear(); for (int i = 0; i < 100000; i++) { random.nextBytes(bytes); String s =

mysql 获取全局唯一值

…衆ロ難τιáo~ 提交于 2020-03-01 08:22:22
<p align="left">在涉及数据库存储数据的时候,经常会遇到唯一值问题,有的是主键带来的限制,有的则是业务上的需要。</p> <p align="left">下面介绍几种唯一值的获取或者生产方法:</p> <div align="left">先建一个测试用的表tbl_user,有三个字段:Id、Name、Age,其中Id为主键。</div> <div class="csharpcode"> <pre><span class="lnum"> 1: </span><span class="kwrd">drop</span> <span class="kwrd">table</span> <span class="kwrd">if</span> <span class="kwrd">exists</span> `tbl_user`;</pre> <pre><span class="lnum"> 2: </span><span class="kwrd">create</span> <span class="kwrd">table</span> </pre> <pre><span class="lnum"> 3: </span>`tbl_user` (</pre> <pre><span class="lnum"> 4: </span> `Id` <span class="kwrd"