国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Redis - 簡單實用!利用Redis輕松實現高并發全局ID生成器

簡單實用!利用Redis輕松實現高并發全局ID生成器

2023-05-07 05:15未知服務器之家 Redis

Redis作為高性能的KV數據庫,并且操作還是原子性的,所以用來做支持高并發的發號器十分合適。 本文給大家介紹3種常見的全局ID生成方式。 1、全局遞增ID 目標:一直遞增的全局ID。 /** * 一直遞增的全局id * * @param redisTemplate redi

簡單實用!利用Redis輕松實現高并發全局ID生成器

Redis作為高性能的KV數據庫,并且操作還是原子性的,所以用來做支持高并發的發號器十分合適。

本文給大家介紹3種常見的全局ID生成方式。

1、全局遞增ID

目標:一直遞增的全局ID。

/**
* 一直遞增的全局id
*
* @param redisTemplate redis客戶端對象
* @param busId 業務id,可以按需配置
* @param step 步長,即每次遞增的間隔
*/
public static String getNo(RedisTemplate<String, Object> redisTemplate, String busId, int step) {
//保存redis中的key,注意不要重復
String redisKey = "uniqueNo_";
//利用increment即redis原生incrBy命令的原子性特性生成遞增的序列號
Long increment = redisTemplate.opsForValue().increment(redisKey, step);
if (increment == null) {
throw new RuntimeException("redis命令執行失敗");
}
//業務id+遞增id,如果需要純數字,去掉業務id即可
return busId + increment;
}

2、以天為分割的全局ID

目標:生成格式為 yyyyMMdd + 遞增序列號的全局ID。

/**
* 以天為間隔的遞增序列號
* @param redisTemplate redis客戶端對象
* @param busId 業務id,可以按需配置
* @param step 步長,即每次遞增的間隔
*/
public static String getNo(RedisTemplate<String, Object> redisTemplate, String busId, int step) {
//當天日期,比如20221226
String date = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
//保存redis中的key,注意不要重復
String redisKey = "uniqueNo_" + date;
//利用increment即redis原生incrBy命令的原子性特性生成遞增的序列號
Long increment = redisTemplate.opsForValue().increment(redisKey, step);
if (increment == null) {
throw new RuntimeException("redis命令執行失敗");
}
if (step == increment.intValue()) {
//首次執行時,給redisKey設置ttl,第二天這個key就可以被redis自動刪除
redisTemplate.expire(redisKey, 25, TimeUnit.HOURS);
}
//組合 20221226 + 業務id + 0001(可以根據需要自由調整序列號的長度)
return date + busId + String.format("%04d", increment);
}

3、批量獲取ID

有時我們需要批量的獲取遞增ID,比如給一批訂單號設置ID。

/**
* 批量獲取id
*
* @param redisTemplate redis客戶端對象
* @param busId 業務id,可以按需配置
* @param size 獲取的id個數,與步長類似
*/
public static List<String> getNoByGroup(RedisTemplate<String, Object> redisTemplate, String busId, int size) {
//保存redis中的key,注意不要重復
String redisKey = "uniqueNo_group";
//設置步長為size,相當于一次性申請size個id
Long increment = redisTemplate.opsForValue().increment(redisKey, size);
if (increment == null) {
throw new RuntimeException("redis命令執行失敗");
}
long begin = increment - Long.parseLong(size + "");
List<String> rs = new ArrayList<>();
for (long i = begin + 1; i <= increment; i++) {
rs.add(busId + i);
}
return rs;
}

總結

無論我們需要什么格式的ID,其實只要我們把握住其中的核心:incrBy命令,根據其原子性的特性,就可以生成我們需要的全局ID。

但是需要注意的是,雖然incrBy命令是原子性的,但是通過組合鍵進行組合時,其實是破壞了這種原子性。如果有特殊的ID格式要求,務必要進行充分的測試。

延伸 · 閱讀

精彩推薦
  • Redis詳解Redis復制原理

    詳解Redis復制原理

    與大多數db一樣,Redis也提供了復制機制,以滿足故障恢復和負載均衡等需求。復制也是Redis高可用的基礎,哨兵和集群都是建立在復制基礎上實現高可用的...

    李留廣10222021-08-09
  • RedisRedis的配置、啟動、操作和關閉方法

    Redis的配置、啟動、操作和關閉方法

    今天小編就為大家分享一篇Redis的配置、啟動、操作和關閉方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    大道化簡5312019-11-14
  • RedisRedis如何實現數據庫讀寫分離詳解

    Redis如何實現數據庫讀寫分離詳解

    Redis的主從架構,能幫助我們實現讀多,寫少的情況,下面這篇文章主要給大家介紹了關于Redis如何實現數據庫讀寫分離的相關資料,文中通過示例代碼介紹...

    羅兵漂流記6092019-11-11
  • Redisredis實現排行榜功能

    redis實現排行榜功能

    排行榜在很多地方都能使用到,redis的zset可以很方便地用來實現排行榜功能,本文就來簡單的介紹一下如何使用,具有一定的參考價值,感興趣的小伙伴們...

    乘月歸5022021-08-05
  • RedisRedis全量復制與部分復制示例詳解

    Redis全量復制與部分復制示例詳解

    這篇文章主要給大家介紹了關于Redis全量復制與部分復制的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Redis爬蟲具有一定的參考學習...

    豆子先生5052019-11-27
  • RedisRedis 事務知識點相關總結

    Redis 事務知識點相關總結

    這篇文章主要介紹了Redis 事務相關總結,幫助大家更好的理解和學習使用Redis,感興趣的朋友可以了解下...

    AsiaYe8232021-07-28
  • Redisredis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    redis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    這篇文章主要給大家介紹了關于redis中如何使用lua腳本讓你的靈活性提高5個逼格的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具...

    一線碼農5812019-11-18
  • Redisredis 交集、并集、差集的具體使用

    redis 交集、并集、差集的具體使用

    這篇文章主要介紹了redis 交集、并集、差集的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友...

    xiaojin21cen10152021-07-27
主站蜘蛛池模板: 亚洲综合色成在线播放 | 久久99国产精品免费网站 | 污污视频网址 | 精品亚洲一区二区三区四区五区 | 99热首页 | 亚洲欧洲日韩 | 亚洲国产精品久久 | 成年网站| 黄片毛片一级 | 日韩欧美在线观看一区二区三区 | 一区日韩| 色女人av | 久久天天躁狠狠躁夜夜躁2014 | 日韩精品区| 一区二区三区国产 | 欧美a在线 | 久久久久久综合 | 艹逼网| 久久久久久国产精品 | 国产精品成人国产乱一区 | 久久成人国产精品 | 观看av| 欧美精品在线看 | 在线成人免费 | 国内精品一区二区 | 亚洲精品一 | 在线视频中文字幕 | 精品久久中文字幕 | 91精品国产综合久久久久久 | 先锋资源网av | 国产一区中文字幕 | 精品久久久久久久久久久下田 | 日韩免费| 激情视频网站 | 欧美视频在线免费 | 免费av在线播放 | 久久午夜精品 | 日日夜夜av| 国产一区二区三区四 | 日韩欧美国产一区二区三区 | 依人在线视频 |