Redis 生成唯一碼的方式(一)

2021-10-21 03:50:36 字數 4524 閱讀 3834

1、涉及到的表結構

create table `int_item_identity` (

`id` int(11) not null auto_increment comment 'id',

`name` varchar(255) not null comment '名稱',

`alias` varchar(255) not null comment '別名',

`rule` varchar(255) not null comment '字首prefix',

`length` bigint(20) not null comment '長度',

`init_value` bigint(20) not null comment '初始值',

`cur_value` bigint(20) not null comment '當前值',

`max_value` bigint(20) not null comment '最大值',

`step` int(5) not null comment '步長,每次加的長度',

`version` int(5) not null comment '版本號',

primary key (`id`) using btree

) engine=innodb auto_increment=46 default charset=utf8 row_format=dynamic comment='自定義編碼範圍';

2、redis 依賴包

org.springframework.boot

spring-boot-starter-data-redis

2.1.3.release

3、 簡要的**塊

@slf4j

/*** 主鍵

*/private final static string int_item_identity,

key_format,

max_id_format,

data,

value,

empty_string;

/*** 靜態**塊

*/static

/*** 通用的查詢

*/@autowired

/*** 通用的查詢

*/@autowired

/*** redis 字串操作

*/@autowired

private redisstringclient redisstringclient;

/*** redis set操作

*/@autowired

private redisclient redisclient;

/*** 自定義編碼範圍

*/@autowired

private identityservice identityservice;

/*** 傳送簡訊

*/@autowired

private intmessagesendservice messagesendservice;

/*** 獲取編碼,這個繼承這個,傳泛型

* * @return 返回 編碼

*/protected string getcode()

/*** 獲取編碼,這個繼承這個,傳泛型

* * @param prefix 字首

* @return 返回 編碼

*/protected string getcode(string prefix)

/*** 獲取編碼,按照傳的表名和主鍵

* * @param tablename 表名

* @param primarykey 主鍵名稱

* @param prefix 字首

* @return 返回編碼

*/protected string getcode(string tablename, string primarykey, string prefix)

assert.notnull(tablename, "表名不能為空");

intitemidentity intitemidentity = getintitemidentity(tablename);

assert.notnull(intitemidentity, "編碼關係沒有配置");

if (stringutils.isblank(prefix))

// 獲取最大值

string maxid = getmaxid(tablename, primarykey, prefix, intitemidentity);

//設定子執行緒共享

servletrequestattributes servletrequestattributes = (servletrequestattributes) requestcontextholder.getrequestattributes();

if (servletrequestattributes != null)

return maxid;

} /**

* 獲取 泛型精確型別

*/protected class<?> getactualtype()

/*** 獲取 泛型精確型別

* * @param supertype 類

* @return 返回泛型物件

*/protected class<?> getactualtype(type supertype)

return (class<?>) type;

} return null;

} // --- 私有方法 ---

/*** 獲取實體類的表名

*/private string gettablename()

return ((table) annotation).name();

} /**

* 獲取表的主鍵

*/private string getprimarykey()

field fields = type.getdeclaredfields();

for (field field : fields)

column column = field.getannotation(column.class);

if (column == null)

return column.name();

} return null;

} /**

* 獲取最大的id

* * @param tablename 表名

* @param primarykey 主鍵名稱

* @param prefix 字首

* @param intitemidentity 實體物件

* @return 返回 最大id

*/private string getmaxid(string tablename, string primarykey, string prefix, intitemidentity intitemidentity) catch (exception e) ", e);

maxid = exceptionhandle(key, primarykey, tablename, prefix);

} if (redismaxid == null || intitemidentity.getcurvalue() == null

|| redismaxid <= intitemidentity.getcurvalue())

return maxid;

} /**

* 異常處理

* * @param key key

* @param primarykey 主鍵的字段

* @param tablename 表名

* @param prefix 字首

* @return 返回最大值

*/private string exceptionhandle(string key, string primarykey, string tablename, string prefix)

assert.notnull(primarykey, "表主鍵不能為空");

try catch (exception e) ", e);

} return maxid;

} /**

* 獲取 intitemidentity

* * @param tablename 表名

* @return 返回 intitemidentity

*/private intitemidentity getintitemidentity(string tablename) catch (exception e) ", e);

} if (intitemidentity == null) else

} catch (exception e) ", e);

}} return intitemidentity;

}}

生成唯一碼

根據年月日 隨機數獲取19位的資料序列 public static long getrandomid 根據年月日 隨機數獲取19位的資料序列 public static long gethashcodeid var num 19 s.length var f datetime.now.tostrin...

python 基於 uuid 生成唯一碼

一 概述 uuid是128位的全域性唯一識別符號,通常由32位元組的字串表示。它可以保證時間和空間的唯一性,也稱為guid,全稱為 uuid universally unique identifier python 中叫 uuid guid globally unique identifier c ...

獲取裝置唯一碼

有些企業內部程式需要對訪問程式的真機做白名單限制,對於裝置唯一碼,蘋果做出了如下限制 1.從ios7之後,獲取mac位址會返回固定值 02 00 00 00 00 00 2.試圖獲取udid 裝置唯一碼 的程式不會通過蘋果的審核。我們可以在程式第一次啟動時生成這個id並儲存起來,但是,如果使用者刪除...