成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

mybatis - Java關于Mysql的隨機id生成

瀏覽:178日期:2022-06-13 11:54:26

問題描述

正在做一個電商項目,在生成id的時候遇到了一點問題。直接采用mysql的auto_increment肯定是不行的,因為這樣的話生成訂單不太安全,第三方可以直接通過id來監控某個時候生成的訂單數。請問類似segmentfault和簡書等網站,我注意到它們生成文章的id一般都比較隨機,為了考慮查找效率肯定不是通過隨機數。請問生成訂單id我應該采取什么方式?

問題解答

回答1:

考慮snowflake算法嗎?

回答2:

幫你搜到一個

/** * Twitter_Snowflake<br> * SnowFlake的結構如下(每部分用-分開):<br> * 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000 <br> * 1位標識,由于long基本類型在Java中是帶符號的,最高位是符號位,正數是0,負數是1,所以id一般是正數,最高位是0<br> * 41位時間截(毫秒級),注意,41位時間截不是存儲當前時間的時間截,而是存儲時間截的差值(當前時間截 - 開始時間截) * 得到的值),這里的的開始時間截,一般是我們的id生成器開始使用的時間,由我們程序來指定的(如下下面程序IdWorker類的startTime屬性)。41位的時間截,可以使用69年,年T = (1L << 41) / (1000L * 60 * 60 * 24 * 365) = 69<br> * 10位的數據機器位,可以部署在1024個節點,包括5位datacenterId和5位workerId<br> * 12位序列,毫秒內的計數,12位的計數順序號支持每個節點每毫秒(同一機器,同一時間截)產生4096個ID序號<br> * 加起來剛好64位,為一個Long型。<br> * SnowFlake的優點是,整體上按照時間自增排序,并且整個分布式系統內不會產生ID碰撞(由數據中心ID和機器ID作區分),并且效率較高,經測試,SnowFlake每秒能夠產生26萬ID左右。 */public class SnowflakeIdWorker { // ==============================Fields=========================================== /** 開始時間截 (2015-01-01) */ private final long twepoch = 1420041600000L; /** 機器id所占的位數 */ private final long workerIdBits = 5L; /** 數據標識id所占的位數 */ private final long datacenterIdBits = 5L; /** 支持的最大機器id,結果是31 (這個移位算法可以很快的計算出幾位二進制數所能表示的最大十進制數) */ private final long maxWorkerId = -1L ^ (-1L << workerIdBits); /** 支持的最大數據標識id,結果是31 */ private final long maxDatacenterId = -1L ^ (-1L << datacenterIdBits); /** 序列在id中占的位數 */ private final long sequenceBits = 12L; /** 機器ID向左移12位 */ private final long workerIdShift = sequenceBits; /** 數據標識id向左移17位(12+5) */ private final long datacenterIdShift = sequenceBits + workerIdBits; /** 時間截向左移22位(5+5+12) */ private final long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits; /** 生成序列的掩碼,這里為4095 (0b111111111111=0xfff=4095) */ private final long sequenceMask = -1L ^ (-1L << sequenceBits); /** 工作機器ID(0~31) */ private long workerId; /** 數據中心ID(0~31) */ private long datacenterId; /** 毫秒內序列(0~4095) */ private long sequence = 0L; /** 上次生成ID的時間截 */ private long lastTimestamp = -1L; //==============================Constructors===================================== /** * 構造函數 * @param workerId 工作ID (0~31) * @param datacenterId 數據中心ID (0~31) */ public SnowflakeIdWorker(long workerId, long datacenterId) {if (workerId > maxWorkerId || workerId < 0) { throw new IllegalArgumentException(String.format('worker Id can’t be greater than %d or less than 0', maxWorkerId));}if (datacenterId > maxDatacenterId || datacenterId < 0) { throw new IllegalArgumentException(String.format('datacenter Id can’t be greater than %d or less than 0', maxDatacenterId));}this.workerId = workerId;this.datacenterId = datacenterId; } // ==============================Methods========================================== /** * 獲得下一個ID (該方法是線程安全的) * @return SnowflakeId */ public synchronized long nextId() {long timestamp = timeGen();//如果當前時間小于上一次ID生成的時間戳,說明系統時鐘回退過這個時候應當拋出異常if (timestamp < lastTimestamp) { throw new RuntimeException( String.format('Clock moved backwards. Refusing to generate id for %d milliseconds', lastTimestamp - timestamp));}//如果是同一時間生成的,則進行毫秒內序列if (lastTimestamp == timestamp) { sequence = (sequence + 1) & sequenceMask; //毫秒內序列溢出 if (sequence == 0) {//阻塞到下一個毫秒,獲得新的時間戳timestamp = tilNextMillis(lastTimestamp); }}//時間戳改變,毫秒內序列重置else { sequence = 0L;}//上次生成ID的時間截lastTimestamp = timestamp;//移位并通過或運算拼到一起組成64位的IDreturn ((timestamp - twepoch) << timestampLeftShift) //| (datacenterId << datacenterIdShift) //| (workerId << workerIdShift) //| sequence; } /** * 阻塞到下一個毫秒,直到獲得新的時間戳 * @param lastTimestamp 上次生成ID的時間截 * @return 當前時間戳 */ protected long tilNextMillis(long lastTimestamp) {long timestamp = timeGen();while (timestamp <= lastTimestamp) { timestamp = timeGen();}return timestamp; } /** * 返回以毫秒為單位的當前時間 * @return 當前時間(毫秒) */ protected long timeGen() {return System.currentTimeMillis(); } //==============================Test============================================= /** 測試 */ public static void main(String[] args) {SnowflakeIdWorker idWorker = new SnowflakeIdWorker(0, 0);for (int i = 0; i < 1000; i++) { long id = idWorker.nextId(); System.out.println(Long.toBinaryString(id)); System.out.println(id);} }}

文章鏈接 http://www.cnblogs.com/reluce...

回答3:

使用 mysql 內置函數: UUID(),生成不重復的 id;另外設置流水號字段,使用自增。

相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
奇米综合一区二区三区精品视频| 精品久久久久久久久久久久包黑料 | 国产精品综合二区| 国产日韩一区二区三区| 国产欧美一区二区三区在线看蜜臀 | 国产精品久久毛片av大全日韩| 成人99免费视频| 日韩欧美亚洲一区二区| 国产河南妇女毛片精品久久久| 欧美日韩国产大片| 老鸭窝一区二区久久精品| 欧美做爰猛烈大尺度电影无法无天| 视频在线观看一区| 久久九九免费| 午夜精品福利久久久| 久久精品一区| 日韩经典一区二区| 91福利在线免费观看| 美女爽到高潮91| 欧美性淫爽ww久久久久无| 日韩成人伦理电影在线观看| 久久国产精品久久w女人spa| 日日欢夜夜爽一区| 色老头久久综合| 奇米四色…亚洲| 欧美色窝79yyyycom| 国内精品久久久久影院色| 这里只有精品99re| 成人黄色大片在线观看| 日韩亚洲欧美在线| 不卡欧美aaaaa| 久久综合成人精品亚洲另类欧美 | 日韩一区二区免费电影| 成人国产亚洲欧美成人综合网 | 国产精品久久久久毛片软件| 黄色精品一区| 一区二区三区四区国产精品| 麻豆成人小视频| 狠狠色2019综合网| 欧美成人性战久久| 欧美chengren| 综合久久久久久| 国产精品尤物| 日本va欧美va精品| 91精品国产麻豆| av不卡在线观看| 国产精品久久久久久久久晋中| 国产欧美激情| 美国毛片一区二区三区| 精品日韩一区二区三区| 欧美视频观看一区| 亚洲综合一区二区精品导航| 色婷婷综合久久久中文字幕| 国产老妇另类xxxxx| 26uuu国产在线精品一区二区| 欧美成人久久| 亚洲一区二区视频| 欧美日韩国产免费| 午夜精品剧场| 亚洲国产中文字幕| 欧美一区二区三区婷婷月色| 欧美特黄a级高清免费大片a级| 亚洲一区二区三区视频在线播放| 欧美午夜影院一区| hitomi一区二区三区精品| 国产精品国产三级国产普通话三级 | 在线免费亚洲电影| 福利电影一区二区| 成人欧美一区二区三区在线播放| 久久亚洲图片| 成人av动漫网站| 亚洲在线视频免费观看| 欧美日韩亚洲综合在线 | 亚洲精品一区二区三区樱花| 石原莉奈在线亚洲二区| 日韩亚洲国产中文字幕欧美| 一区二区视频欧美| 久久精品72免费观看| 国产日韩欧美制服另类| 校园激情久久| 国产91对白在线观看九色| 亚洲激情男女视频| 欧美一区二区三区喷汁尤物| 欧美大片专区| 免费观看日韩av| 国产精品视频在线看| 欧美影院一区二区三区| 欧美久色视频| 久久国产欧美日韩精品| 国产精品三级电影| 91高清视频在线| 韩国av一区| 国产一区二区剧情av在线| 亚洲日本成人在线观看| 欧美片网站yy| 99在线精品视频在线观看| 国产成人精品www牛牛影视| 亚洲精品欧美综合四区| 欧美一区二区三区在线电影| aⅴ色国产欧美| 成人黄色免费短视频| 亚洲线精品一区二区三区| 欧美电视剧在线看免费| 久久精品官网| 美美哒免费高清在线观看视频一区二区 | 精品三级在线观看| 久久精品盗摄| 欧美日韩国产在线一区| 国内精品国产成人| 亚洲一区在线免费观看| 久久你懂得1024| 欧美亚洲综合色| 亚洲国产1区| 成人av影院在线| 日韩精品电影一区亚洲| 国产精品欧美一区喷水| 4438成人网| 免费一区二区三区| 欧美日本免费| 国产成人精品免费视频网站| 亚洲成人精品一区二区| 精品久久一区二区| 欧美最猛黑人xxxxx猛交| 夜夜夜久久久| 92国产精品观看| 国产一区久久久| 污片在线观看一区二区| 亚洲三级电影网站| 国产亚洲美州欧州综合国| 欧美色男人天堂| 国产乱码精品| 伊人婷婷久久| 91偷拍与自偷拍精品| 国产一区二区不卡在线| 日韩成人精品在线| 一区二区三区在线免费播放 | 久久99精品国产.久久久久久| 亚洲精品亚洲人成人网在线播放| 欧美成人激情免费网| 欧美午夜一区二区| 99在线观看免费视频精品观看| 欧美在线二区| 国产成人午夜视频| 免费人成黄页网站在线一区二区 | 欧美男生操女生| 久久激情久久| 在线亚洲免费| 91亚洲精品一区二区乱码| 久久se精品一区二区| 一区二区免费视频| 中文字幕亚洲欧美在线不卡| 精品盗摄一区二区三区| 欧美一级黄色录像| 在线一区二区视频| 色婷婷亚洲综合| 日韩一区二区久久| 一区视频在线看| 国内精品久久久久久久影视麻豆 | 成人黄色一级视频| 激情五月婷婷综合| 蜜桃久久av一区| 亚洲国产综合91精品麻豆| 亚洲欧美一区二区三区久本道91| 2020国产精品久久精品美国| 91精品国产一区二区| 欧美伊人久久大香线蕉综合69| 久久亚洲精品伦理| 亚洲一区二区三区四区五区午夜| 国语自产精品视频在线看抢先版结局 | 成人app网站| 国产麻豆精品theporn| 激情欧美日韩一区二区| 美日韩黄色大片| 免费观看一级欧美片| 日本sm残虐另类| 蜜芽一区二区三区| 蜜桃av一区二区| 日本不卡的三区四区五区| 日韩av在线发布| 日本视频中文字幕一区二区三区| 日本不卡视频一二三区| 肉丝袜脚交视频一区二区| 日本不卡视频在线观看| 天堂午夜影视日韩欧美一区二区| 日韩电影在线观看网站| 日本aⅴ免费视频一区二区三区| 蜜臀av性久久久久蜜臀aⅴ流畅| 日韩成人一区二区三区在线观看| 蜜芽一区二区三区| 国产另类ts人妖一区二区| 国产福利一区在线观看| 国产99久久精品| 播五月开心婷婷综合| 欧美精品七区| 亚洲第一在线| 亚洲在线免费| 色狠狠一区二区| 91精品国产综合久久福利| 欧美mv日韩mv国产| 欧美激情一区二区三区不卡 |