博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个完全平均分布的固定长度随机数发生器
阅读量:6220 次
发布时间:2019-06-21

本文共 552 字,大约阅读时间需要 1 分钟。

背景:

订单需要一个不重复且加密的的订单号,而且订单号不能太长!加密说白了就是不想让任何人从订单号中看出来今天产生了多少个订单。订单号要不重复且不太长,那就只能是日期+流水号。但是,流水号显然不能符合加密的需求。所以,流水号就需要加密了。

最初的想法:

初始化一个顺序序列的map,然后随机取出一个数放到一个栈里面并删除map里面的元素,直到把map取空为止。这样,就得到了一个包含完全正态分布的随机数序列的栈。生成一个订单就从栈里面弹出一个作为流水号。这个方案在持久化上比较难处理,所以最终被放弃了。至于为什么要持久化,其实很简单,你总不能指望这个系统永远正常工作吧?一旦重启,就可能产生重复的流水号。

进一步的优化:

初始化一个顺序序列的map,然后随机取出一个数放到一个循环链表里面并删除map里面的元素,直到把map取空为止。这个方案的好处是可以用较低的成本进行初始化和持久化。因为这个序列可以循环使用,所以只需要保存一次序列就可以了。使用的时候,只要取出下一个节点的值作为流水号,然后每过1000个节点保存一次当前节点,服务重启后取保存的当前节点后1000个节点作为当前节点,就不虞流水重复了。

转载于:https://www.cnblogs.com/xuanbg/p/6650150.html

你可能感兴趣的文章
Symmetrix的远程复制技术SRDF的实现及解决方案
查看>>
微信第三方细节
查看>>
Hyperledger Fabric Node.js如何使用基于通道的事件服务
查看>>
c编程应注意到的细节问题
查看>>
linux文件类型及权限
查看>>
深入浅出Vue 使用中的小技巧
查看>>
Metasploit 5.0释出!轻松对多主机渗透测试
查看>>
缓存伪共享问题以及解决方案缓存行填充
查看>>
linux的简单命令
查看>>
SpringMVC常见面试题总结【概念】
查看>>
zookeeper使用和原理探究(一)
查看>>
OSChina 周五乱弹 —— 为什么程序媛那么少?
查看>>
OSChina 周二乱弹 —— 我有垃圾,你有桶么
查看>>
前端那些事之工具涵数库--underscore
查看>>
shell script advanced
查看>>
ubuntu12.04 software-center 的一个BUG
查看>>
ORACLE双机系统日志清理脚本
查看>>
VM虚拟机:从小白一步一步安装linux centos6.5虚拟机
查看>>
Maven创建web工程报错
查看>>
[Android 之美] 那些你不知道的APK 瘦身,让你的APK更小
查看>>