基于Redis生成全局ID

上一篇 <<<基于Twitter的snowflake(雪花)算法實現(xiàn)全局ID
下一篇 >>>服務注冊拣帽、服務發(fā)現(xiàn)和服務治理


方法一:預先生成

1皂股、提前生成一批訂單號放在redis中丙唧,每次使用的時候取一個办桨,當庫里沒有了,再生成一批
2垢箕、使用的時候前面用系統(tǒng)時間戳划栓,后面加上redis中取得的數(shù)據(jù)即可。

方法二:利用redis的自增

因為Redis是單線的条获,天生保證原子性忠荞,可以使用Redis的原子操作 INCR和INCRBY來實現(xiàn)

優(yōu)點

不依賴于數(shù)據(jù)庫,靈活方便帅掘,且性能優(yōu)于數(shù)據(jù)庫委煤。
數(shù)字ID天然排序,對分頁或者需要排序的結果很有幫助修档。

缺點

如果系統(tǒng)中沒有Redis碧绞,還需要引入新的組件,增加系統(tǒng)復雜度吱窝。
需要編碼和配置的工作量比較大讥邻。

注意:在Redis集群情況下,同樣和Redis一樣需要設置不同的增長步長院峡,同時key一定要設置有效期

》可以使用Redis集群來獲取更高的吞吐量兴使。假如一個集群中有5臺Redis≌占ぃ可以初始化每臺Redis的值分別是1,2,3,4,5发魄,然后步長都是5。各個Redis生成的ID為:

A:1,6,11,16,21
B:2,7,12,17,22
C:3,8,13,18,23
D:4,9,14,19,24
E:5,10,15,20,25

比較適合使用Redis來生成每天從0開始的流水號俩垃。比如訂單號=日期+當日自增長號欠母』恫撸可以每天在Redis中生成一個Key,使用INCR進行累加赏淌。
如果生成的訂單號超過自增增長的話,可以采用前綴+自增+并且設置有效期

設置有效期可統(tǒng)計當天的數(shù)據(jù)量啄清,

eg:2019010409552100001六水、2019010409552100002、2019010409552200003辣卒、2019010409552300004
2019010509552100001掷贾、2019010509552100002、2019010509552200003荣茫、2019010509552300004

代碼示例:

@RestController
public class OrderController {
    @Autowired
    private RedisTemplate redisTemplate;

    /**
    * timeOut一般設置為24小時想帅,則次日會從0重新開始計算
    */
    @RequestMapping("/order")
    public String order(String key, Long timeOut) {
        RedisAtomicLong redisAtomicLong = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
        //設置起始值
        // redisAtomicLong.set(1);
        // 設置redis步長增長為2
        redisAtomicLong.addAndGet(1);
        // for (int i = 0; i < 100; i++) {
        long andIncrement = redisAtomicLong.getAndIncrement();
        //設置5位,不夠則前面補零
        String orderId = prefix() + String.format("%1$05d", andIncrement);
        String insertSQL = "insert into orderNumber value('" + orderId + "');";
        // System.out.println(Thread.currentThread().getName() +
        // ",insertSQL:" + insertSQL);
        System.out.println(insertSQL);
        if ((null == redisAtomicLong || redisAtomicLong.longValue() == 0) && timeOut > 0) {// 初始設置過期時間
            redisAtomicLong.expire(timeOut, TimeUnit.SECONDS);
        }

        // }

        return "success";
    }

    public static String prefix() {
        String temp_str = "";
        Date dt = new Date();
        // 最后的aa表示“上午”或“下午” HH表示24小時制 如果換成hh表示12小時制
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        temp_str = sdf.format(dt);
        return temp_str;
    }
    public static void main(String[] args) {
        System.out.println(prefix());
    }
}

推薦閱讀:
<<<分布式全局ID生成總覽
<<<基于數(shù)據(jù)庫自增方式實現(xiàn)全局ID
<<<基于UUID算法實現(xiàn)全局ID
<<<基于Twitter的snowflake(雪花)算法實現(xiàn)全局ID

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末啡莉,一起剝皮案震驚了整個濱河市港准,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌咧欣,老刑警劉巖浅缸,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異魄咕,居然都是意外死亡衩椒,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門哮兰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毛萌,“玉大人,你說我怎么就攤上這事喝滞「蠼” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵囤躁,是天一觀的道長冀痕。 經(jīng)常有香客問我,道長狸演,這世上最難降的妖魔是什么言蛇? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮宵距,結果婚禮上腊尚,老公的妹妹穿的比我還像新娘满哪。我一直安慰自己婿斥,他們只是感情好劝篷,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著民宿,像睡著了一般娇妓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上活鹰,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天哈恰,我揣著相機與錄音,去河邊找鬼志群。 笑死着绷,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的锌云。 我是一名探鬼主播荠医,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼桑涎!你這毒婦竟也來了彬向?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤石洗,失蹤者是張志新(化名)和其女友劉穎幢泼,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體讲衫,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡缕棵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了涉兽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片招驴。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖枷畏,靈堂內(nèi)的尸體忽然破棺而出别厘,到底是詐尸還是另有隱情,我是刑警寧澤拥诡,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布触趴,位于F島的核電站,受9級特大地震影響渴肉,放射性物質(zhì)發(fā)生泄漏冗懦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一仇祭、第九天 我趴在偏房一處隱蔽的房頂上張望披蕉。 院中可真熱鬧,春花似錦、人聲如沸没讲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽爬凑。三九已至徙缴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贰谣,已是汗流浹背娜搂。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吱抚,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓考廉,卻偏偏與公主長得像秘豹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子昌粤,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容