日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

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

問題描述

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

問題解答

回答1:

考慮snowflake算法嗎?

回答2:

幫你搜到一個

/** * Twitter_Snowflake<br> * SnowFlake的結構如下(每部分用-分開):<br> * 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000 <br> * 1位標識,由于long基本類型在Java中是帶符號的,最高位是符號位,正數(shù)是0,負數(shù)是1,所以id一般是正數(shù),最高位是0<br> * 41位時間截(毫秒級),注意,41位時間截不是存儲當前時間的時間截,而是存儲時間截的差值(當前時間截 - 開始時間截) * 得到的值),這里的的開始時間截,一般是我們的id生成器開始使用的時間,由我們程序來指定的(如下下面程序IdWorker類的startTime屬性)。41位的時間截,可以使用69年,年T = (1L << 41) / (1000L * 60 * 60 * 24 * 365) = 69<br> * 10位的數(shù)據(jù)機器位,可以部署在1024個節(jié)點,包括5位datacenterId和5位workerId<br> * 12位序列,毫秒內的計數(shù),12位的計數(shù)順序號支持每個節(jié)點每毫秒(同一機器,同一時間截)產生4096個ID序號<br> * 加起來剛好64位,為一個Long型。<br> * SnowFlake的優(yōu)點是,整體上按照時間自增排序,并且整個分布式系統(tǒng)內不會產生ID碰撞(由數(shù)據(jù)中心ID和機器ID作區(qū)分),并且效率較高,經測試,SnowFlake每秒能夠產生26萬ID左右。 */public class SnowflakeIdWorker { // ==============================Fields=========================================== /** 開始時間截 (2015-01-01) */ private final long twepoch = 1420041600000L; /** 機器id所占的位數(shù) */ private final long workerIdBits = 5L; /** 數(shù)據(jù)標識id所占的位數(shù) */ private final long datacenterIdBits = 5L; /** 支持的最大機器id,結果是31 (這個移位算法可以很快的計算出幾位二進制數(shù)所能表示的最大十進制數(shù)) */ private final long maxWorkerId = -1L ^ (-1L << workerIdBits); /** 支持的最大數(shù)據(jù)標識id,結果是31 */ private final long maxDatacenterId = -1L ^ (-1L << datacenterIdBits); /** 序列在id中占的位數(shù) */ private final long sequenceBits = 12L; /** 機器ID向左移12位 */ private final long workerIdShift = sequenceBits; /** 數(shù)據(jù)標識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; /** 數(shù)據(jù)中心ID(0~31) */ private long datacenterId; /** 毫秒內序列(0~4095) */ private long sequence = 0L; /** 上次生成ID的時間截 */ private long lastTimestamp = -1L; //==============================Constructors===================================== /** * 構造函數(shù) * @param workerId 工作ID (0~31) * @param datacenterId 數(shù)據(jù)中心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生成的時間戳,說明系統(tǒng)時鐘回退過這個時候應當拋出異常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 內置函數(shù): UUID(),生成不重復的 id;另外設置流水號字段,使用自增。

相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品白丝久久av网站| 欧美在线看片| 国产精品宾馆| 免费在线亚洲欧美| 老司机精品视频在线播放| 国产精品久久久久77777丨| 国产另类在线| 麻豆传媒一区二区三区| 精品视频网站| av免费不卡国产观看| 精品入口麻豆88视频| 丁香婷婷久久| 国产精品字幕| 亚洲精品99| 老鸭窝亚洲一区二区三区| 石原莉奈在线亚洲二区| 亚洲tv在线| 国产日韩欧美一区| 福利在线免费视频| 日韩午夜黄色| 亚洲区国产区| 国产视频网站一区二区三区| 精品亚洲自拍| 日韩精品看片| 玖玖精品视频| 国产日韩欧美三区| 岛国av在线网站| 亚洲欧美日韩国产| 91成人精品在线| 动漫av一区| 国产精品美女| 国产精品网站在线看| 九九九精品视频| 91精品精品| 中文字幕免费一区二区| 乱一区二区av| 国产韩日影视精品| 欧美一级网站| 久久高清精品| 日韩精品免费视频一区二区三区| 美女视频黄免费的久久| 欧美理论视频| 国产欧美高清| 免费精品国产| 91精品丝袜国产高跟在线| 国产精品原创| 婷婷成人av| 精品视频网站| 中文一区二区| 国产精品久久久久77777丨| 韩国久久久久久| 国产精品日韩欧美一区| 国产精品一区二区三区av | 久久亚洲影院| 久久精品毛片| 亚洲一区亚洲| 精品视频在线你懂得| 日韩影院精彩在线| 国产精品99久久精品| 亚洲综合五月| 国产h片在线观看| 蜜臀av国产精品久久久久| 精品一区二区三区的国产在线观看| 亚洲女同中文字幕| 加勒比视频一区| 视频一区免费在线观看| 国产精品成人a在线观看| 亚洲精品三级| 久久中文视频| 久久gogo国模啪啪裸体| 午夜在线精品偷拍| 国产成人久久精品麻豆二区 | 国产图片一区| 欧美日韩高清| 久久精品三级| 欧美一区=区三区| 欧美精品一二| 91欧美日韩| 欧美亚洲综合视频| 91久久亚洲| 欧美天堂视频| 欧美激情99| 日韩精品高清不卡| 国产精品日韩| 欧美日韩在线网站| 色婷婷色综合| 国产精品嫩草影院在线看| 久久都是精品| 日韩一区电影| 久久精品系列| 国产精品一区二区三区av| 亚洲尤物av| 99热精品在线观看| 99精品在线观看| 国产一区二区三区成人欧美日韩在线观看| 日韩精品社区| 亚洲欧美日本国产| 久久国产精品亚洲77777| 精品在线91| 久久蜜桃精品| 欧美三区四区| 久久男人av资源站| 精品一区91| 国产精品综合| 青青草伊人久久| 四虎精品永久免费| 丝袜亚洲精品中文字幕一区| 好看的亚洲午夜视频在线| 久久一级电影| 国产一区清纯| 久久精品青草| 亚洲四虎影院| 久久裸体视频| 亚洲高清久久| 欧美.日韩.国产.一区.二区| 亚洲成av人片一区二区密柚| 久久久9色精品国产一区二区三区| 国产成人精选| 成人在线黄色| 日韩a一区二区| zzzwww在线看片免费| 精品欧美视频| 国产成人久久| 在线观看精品| 亚洲成人精品| 欧美午夜不卡| 免费精品视频在线| 亚洲人成高清| 国产亚洲高清一区| 精品视频一区二区三区四区五区 | 国产一区精品福利| 成人精品动漫一区二区三区| 精品一区二区三区亚洲| 国产第一亚洲| 日韩国产激情| 极品日韩av| 亚洲自拍另类| 亚洲精品少妇| 久久国产三级精品| 精品午夜久久| 人人精品亚洲| 日韩一区二区免费看| 在线观看免费一区二区| 亚洲永久字幕| 日韩av不卡一区二区| 国产精品毛片久久久| 成人亚洲一区二区| 不卡视频在线| 日本不卡在线视频| 国产成年精品| 不卡在线一区二区| 亚洲深深色噜噜狠狠爱网站| 欧美一级一区| 国产精品99在线观看| 国产高清一区二区| 日本不卡视频一二三区| 精品一区二区三区中文字幕| 亚洲国产福利| 在线午夜精品| 久久国产视频网| 日韩一区欧美| 国产视频一区在线观看一区免费| 天堂久久一区| 国产成人黄色| 免费看的黄色欧美网站| 国产欧美高清视频在线| 国产成人精品亚洲日本在线观看| 视频一区中文字幕| 老司机精品在线| 午夜久久免费观看| 91在线成人| 久久久人人人| 亚洲精品影视| 日韩精品dvd| 亚洲久久一区| 91偷拍一区二区三区精品| 亚洲免费中文| 国产一区二区三区精品在线观看| 欧美日韩国产亚洲一区| 欧美在线黄色| 久久伦理在线| 国产精品主播| 国产亚洲激情| 久久精品二区亚洲w码| 日韩视频免费| 麻豆免费精品视频| 模特精品在线| 精品无人区麻豆乱码久久久 | 久久精品国产网站| 久久午夜精品一区二区| 国产一区二区久久久久| 免费在线观看视频一区| 中文字幕成在线观看| 日韩av一区二区三区| 亚洲午夜av| 国产一区日韩| 日韩av在线免费观看不卡| 合欧美一区二区三区| 高清一区二区| 伊人久久大香伊蕉在人线观看热v|