通常我们生成序列号的时候喜欢把时间作为序列号的一种,但时间序列号的长度为15,这样导致我们的序列号就非常长导致

1,存放时占用空间大,

2,查询时效率慢

我们是不是可以把时间序列号变短呢?

我们知道:

根据ascII编码表,我们可以看出

ASCII 码 字符   ASCII 码 字符   ASCII 码 字符   ASCII 码 字符
十进位 十六进位   十进位 十六进位   十进位 十六进位   十进位 十六进位
032 20     056 38 8   080 50 P   104 68 h
033 21 !   057 39 9   081 51 Q   105 69 i
034 22 "   058 3A :   082 52 R   106 6A j
035 23 #   059 3B ;   083 53 S   107 6B k
036 24 $   060 3C <   084 54 T   108 6C l
037 25 %   061 3D =   085 55 U   109 6D m
038 26 &   062 3E >   086 56 V   110 6E n
039 27 '   063 3F ?   087 57 W   111 6F o
040 28 (   064 40 @   088 58 X   112 70 p
041 29 )   065 41 A   089 59 Y   113 71 q
042 2A *   066 42 B   090 5A Z   114 72 r
043 2B +   067 43 C   091 5B [   115 73 s
044 2C ,   068 44 D   092 5C \   116 74 t
045 2D -   069 45 E   093 5D ]   117 75 u
046 2E .   070 46 F   094 5E ^   118 76 v
047 2F /   071 47 G   095 5F _   119 77 w
048 30 0   072 48 H   096 60 `   120 78 x
049 31 1   073 49 I   097 61 a   121 79 y
050 32 2   074 4A J   098 62 b   122 7A z
051 33 3   075 4B K   099 63 c   123 7B {
052 34 4   076 4C L   100 64 d   124 7C |
053 35 5   077 4D M   101 65 e   125 7D }
054 36 6   078 4E N   102 66 f   126 7E ~
055 37 7   079 4F O   103 67 g   127 7F DEL

小写字符a(97) 使用不同存储时的编码长度

二进制:01100001

八进制:141

十进制:97

十六进制:61

可以看出,随着进制的增高,字符的长度也会越来越短,如果我们拿我们常用的0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ这个62个字符作为编码,那么62进制就可以表示了。

再进行编码前,我搜了一下git,上面已经有代码实现了(base62),我就不再实现一遍了,代码如下:

1.编码,将long型转换为62进制字符串

    /*** Encodes a decimal value to a Base62 <code>String</code>.* * @param b10*            the decimal value to encode, must be nonnegative.* @return the number encoded as a Base62 <code>String</code>.*/public String encodeBase10(long b10) {if (b10 < 0) {throw new IllegalArgumentException("b10 must be nonnegative");}String ret = "";while (b10 > 0) {ret = characters.charAt((int) (b10 % 62)) + ret;b10 /= 62;}return ret;}

2.解码,逆过程

    /*** Decodes a Base62 <code>String</code> returning a <code>long</code>.* * @param b62*            the Base62 <code>String</code> to decode.* @return the decoded number as a <code>long</code>.* @throws IllegalArgumentException*             if the given <code>String</code> contains characters not*             specified in the constructor.*/public long decodeBase62(String b62) {for (char character : b62.toCharArray()) {if (!characters.contains(String.valueOf(character))) {throw new IllegalArgumentException("Invalid character(s) in string: " + character);}}long ret = 0;b62 = new StringBuffer(b62).reverse().toString();long count = 1;for (char character : b62.toCharArray()) {ret += characters.indexOf(character) * count;count *= 62;}return ret;}

测试用例:

    public static void main(String[] args) {Base62 encoder=new Base62();Long time=System.nanoTime();String timeStr=encoder.encodeBase10(time);System.out.println(timeStr);System.out.println(time);System.out.println(encoder.decodeBase62(timeStr));}

console输出结果如下:

2OdCqJOH8
613534552694770
613534552694770

长度由15位变为9位,减少了40%的长度,当前查询效率也得到相应的提升了。

是不是蛮有趣的?

转载于:https://www.cnblogs.com/davidwang456/p/8441259.html

序列号生成的另一种玩法相关推荐

  1. GPT-3的50种玩法告诉你,它很酷,但是没有通过图灵测试

    2020-07-31 01:42:19 作者 | 青 暮 编辑 | 丛 末 自从OpenAI开放GPT-3的API以来,不少人争相申请试用后获得了"门票",并相继在社交网络上推送自 ...

  2. 【Microsoft Azure 的1024种玩法】十五.通过Web浏览器对Auzre VM 服务器运维管理

    [简介] Apache Guacamole是无客户端远程桌面网关.它支持标准协议,例如VNC,RDP和SSH.我们称其为无客户端,因为不需要插件或客户端软件.多亏了HTML5,在服务器上安装了鳄梨调味 ...

  3. 【Microsoft Azure 的1024种玩法】七十二.使用NodeJS手动编写调用Azure Cognitive Services Translator API代码获取其支持翻译的语言集

    [简介] Azure Cognitive Services Translato 是一种基于云的神经网络机器翻译服务,同时也是 REST API 的 Azure 认知服务系列的一部分. 本篇文章将会主要 ...

  4. 智能化名片横空出世,细数AR名片的21种玩法

    一些人可能认为,名片不过是承载着个人信息的卡片.一张好的名片不一定能保证你的成功,但绝对能让人印象深刻.名片遇上AR,又能碰撞出怎样的火花呢? 今天你AR了吗?快来看看AR名片的21种玩法 1)名片信 ...

  5. 【Microsoft Azure 的1024种玩法】六十二.利用Azure Private DNS 实现虚拟网络中域名的管理解析

    [简介] Azure Private DNS是Azure为我们虚拟网络提供的安全可靠的DNS服务,我们无需自行配置DNS即可在虚拟网络中实现域名的解析及配置, 于此同时,我们在内网中也可以利用自己的自 ...

  6. 【Microsoft Azure 的1024种玩法】七十一.基于Azure Virtual Machines快速上手搭建Typecho博客系统

    [简介] Typecho 是基于 PHP5 构建的开源跨平台博客系统,Typecho开源跨平台博客系统相较于wordpress .hexo有一定的性能优势,是我们记录文章内容的最佳首选博客,那么本篇文 ...

  7. 反诈宣传互动答题小程序及其三种玩法

    最近,各地的反诈宣传活动,都在有条不紊的进行.所以,作为小程序开发者,特地出了一期关于反诈宣传的模板合集,一起来看看吧! 线上宣传具有便捷性和易传播性,为了进一步加大反诈骗宣传力度,我们要利用好这个渠 ...

  8. 超级智能玩具《小小机器人》|全新50种玩法,创造力之源

    致砖<小小机器人>全新套装 电动+机械的完美结合 先来看看视频过过眼瘾吧 来自美国STEAM教育 让孩子跨学科学知识 积木向来是STEAM教育很重要的一部分,因为它涉及到了多种学科: 要搭 ...

  9. 超级智能玩具《小小机器人》首发|全新50种玩法,创造力之源

    致砖<小小机器人>套装全新首发 电动+机械的完美结合 先来看看视频过过眼瘾吧 来自美国STEAM教育 让孩子跨学科学知识 积木向来是STEAM教育很重要的一部分,因为它涉及到了多种学科: ...

最新文章

  1. Crawler之Scrapy:Scrapy简介、安装、使用方法之详细攻略
  2. 邀请函|2021 云原生实战峰会,邀请您免费现场参会报名
  3. 计算机视觉之OpenCV教程 --- Mat图像类基础(二)
  4. int size java_int size()
  5. 三菱fx5u编程手册_FX5U系列PLC控制伺服3种方式
  6. 小波变换和motion信号处理(二)【转载】
  7. centeros6.8 mysql_Center os6.5 mysql
  8. JavaScript 移动和触摸框架
  9. Await Async和Thread.waitAll想法?未完待续
  10. Python使用hashlib模块生成给定文本数据的签名摘要信息(包括各种哈希函数)
  11. JavaScript继承方式详解[转]
  12. 计算机组成原理(白中英)简答题复习
  13. cmos和ttl_TTL和CMOS电平别傻傻分不清
  14. 科研画图——流程图软件draw.io
  15. pyenchant英文单词拼写检查
  16. Markdown学习
  17. V4L2文档翻译(十一)
  18. opencv拟合多边形
  19. ABAP-接口-tcode:SPROXY-tcode:SXI_MONITOR
  20. 检查软件下载是否完整 MD5 工具使用 ----- md5sum

热门文章

  1. spring boot第八讲
  2. python翻译成matlab_matlab语言转译成python
  3. php整蛊关机代码,整人代码大全
  4. mysql参数优化51cto_超详细MySQL数据库优化
  5. java 用来查找输出的函数_Solr复杂查询一:函数查询
  6. irule jar包无法导入_Java之Spring1:Spring简介、环境搭建、源码下载及导入MyEclipse...
  7. axure rp制作输入法_Axure教程丨制作自己的Axure元件库
  8. boot spring 接口接收数据_基于 Spring Boot 实现 Restful 风格接口,实现增删改查功能...
  9. oracle中字典指的是什么,ORACLE数据库中什么是数据字典及作用
  10. VC包含目录、附加依赖项、库目录及具体设置