diff --git a/README.md b/README.md
index 653d032..578a203 100644
--- a/README.md
+++ b/README.md
@@ -21,36 +21,36 @@ QQ群:646049993
## 💎 本算法介绍
-❄ 这是一个优化的雪花算法(雪花漂移),生成的ID更短、速度更快。
+❄ 这是一个优化的雪花算法(雪花漂移),生成的ID更短、速度更快。
-❄ 原生支持 C#/Java/Go/Rust/C 等语言,并提供 PHP、Python、Node.js、Ruby 等语言多线程安全调用库(FFI)。
+❄ 原生支持 C#/Java/Go/Rust/C 等语言,并提供 PHP、Python、Node.js、Ruby 等语言多线程安全调用库(FFI)。
-❄ 支持 k8s 等容器环境自动扩容(自动注册 WorkerId)。
+❄ 支持 k8s 等容器环境自动扩容(自动注册 WorkerId)。
-❄ 可在单机或分布式环境中生成唯一ID。
+❄ 可在单机或分布式环境中生成唯一ID。
-❄ 这是计算机历史上最全面的雪花ID生成器,未来会超越自己。(目前还未发现更好的,或许你可以😀)
+❄ 这是计算机历史上最全面的雪花ID生成器,未来会超越自己。(目前还未发现更好的,或许你可以😀)
## 需求来源
-💧 作为架构设计的你,想要解决数据库主键唯一的问题,特别是在分布式系统多数据库的时候。
+💧 作为架构设计的你,想要解决数据库主键唯一的问题,特别是在分布式系统多数据库的时候。
-💧 你希望这个主键是用最少的存储空间,索引速度更快,Select、Insert 和 Update 更迅速。
+💧 你希望这个主键是用最少的存储空间,索引速度更快,Select、Insert 和 Update 更迅速。
-💧 你要考虑在分库分表(合库合表)时,主键值可直接使用,并能反映业务时序。
+💧 你要考虑在分库分表(合库合表)时,主键值可直接使用,并能反映业务时序。
-💧 如果这样的主键值太长,超过前端 js Number 类型最大值,须把 Long 型转换为 String 型,你会觉得有点沮丧。
+💧 如果这样的主键值太长,超过前端 js Number 类型最大值,须把 Long 型转换为 String 型,你会觉得有点沮丧。
-💧 尽管 Guid 能自增,但占用空间大,索引速度慢,你也不想用它。
+💧 尽管 Guid 能自增,但占用空间大,索引速度慢,你也不想用它。
-💧 应用实例可能超过50个,每个并发请求可达10W/s。
+💧 应用实例可能超过50个,每个并发请求可达10W/s。
-💧 在容器环境部署应用(水平扩展、自动扩容)。
+💧 在容器环境部署应用(水平扩展、自动扩容)。
-💧 不想依赖 redis 的自增操作。
+💧 不想依赖 redis 的自增操作。
-💧 你希望系统运行 100 年以上。
+💧 你希望系统运行 100 年以上。
## 传统算法问题
@@ -68,17 +68,17 @@ QQ群:646049993
## 新算法特点
-✔ 整形数字,随时间单调递增(不一定连续),长度更短,用50年都不会超过 js Number类型最大值。(默认配置)
+✔ 整形数字,随时间单调递增(不一定连续),长度更短,用50年都不会超过 js Number类型最大值。(默认配置)
-✔ 速度更快,是传统雪花算法的2-5倍,0.1秒可生成50万个(基于8代低压i7)。
+✔ 速度更快,是传统雪花算法的2-5倍,0.1秒可生成50万个(基于8代低压i7)。
-✔ 支持时间回拨处理。比如服务器时间回拨1秒,本算法能自动适应生成临界时间的唯一ID。
+✔ 支持时间回拨处理。比如服务器时间回拨1秒,本算法能自动适应生成临界时间的唯一ID。
-✔ 支持手工插入新ID。当业务需要在历史时间生成新ID时,用本算法的预留位能生成5000个每秒。
+✔ 支持手工插入新ID。当业务需要在历史时间生成新ID时,用本算法的预留位能生成5000个每秒。
-✔ 不依赖任何外部缓存和数据库。(k8s环境下自动注册 WorkerId 的动态库依赖 redis)
+✔ 不依赖任何外部缓存和数据库。(k8s环境下自动注册 WorkerId 的动态库依赖 redis)
-✔ 基础功能,开箱即用,无需配置文件、数据库连接等。
+✔ 基础功能,开箱即用,无需配置文件、数据库连接等。
## 性能数据
@@ -107,7 +107,6 @@ QQ群:646049993
* +-------------------------+--------------+----------+
* | 1.相对基础时间的时间差 | 2.WorkerId | 3.序列数 |
* +-------------------------+--------------+----------+
- * +-------------------------+---- 6 bits ---+- 6 bits -+
*
* 第1部分,时间差,是生成ID时的系统时间减去 BaseTime 的总时间差(毫秒单位)。
* 第2部分,WorkerId,是区分不同机器或不同应用的唯一ID,最大值由 WorkerIdBitLength(默认6)限定。
@@ -147,15 +146,15 @@ QQ群:646049993
## 💎 参数设置
-❄ ***WorkerIdBitLength***,机器码位长,决定 WorkerId 的最大值,默认值6,取值范围 [1, 19],实际上有些语言采用 无符号ushort(uint16) 类型接收该参数,所以最大值是16,如果是采用有符号short(int16),则最大值为15。
+❄ ***WorkerIdBitLength***,机器码位长,决定 WorkerId 的最大值,默认值6,取值范围 [1, 19],实际上有些语言采用 无符号ushort(uint16) 类型接收该参数,所以最大值是16,如果是采用有符号short(int16),则最大值为15。
-❄ ***WorkerId***,机器码,**最重要参数**,无默认值,必须由外部设定,默认情况下最大值63,理论最大值 2^WorkerIdBitLength-1(实际上根据语言的实现不同可能会限定在 65535 或 32767,原理同 WorkerIdBitLength 的规则)。不同机器或不同应用实例不可相同,你可通过应用程序配置该值,也可通过调用外部服务获取值。针对自动注册WorkerId需求,本算法提供默认实现:通过 redis 自动注册 WorkerId 的动态库,详见“Tools\AutoRegisterWorkerId”。
+❄ ***WorkerId***,机器码,**最重要参数**,无默认值,必须由外部设定,默认情况下最大值63,理论最大值 2^WorkerIdBitLength-1(实际上根据语言的实现不同可能会限定在 65535 或 32767,原理同 WorkerIdBitLength 的规则)。不同机器或不同应用实例不可相同,你可通过应用程序配置该值,也可通过调用外部服务获取值。针对自动注册WorkerId需求,本算法提供默认实现:通过 redis 自动注册 WorkerId 的动态库,详见“Tools\AutoRegisterWorkerId”。
-❄ ***SeqBitLength***,序列数位长,默认值6,取值范围 [3, 21](建议不小于4),决定每毫秒生成的 ID 个数。规则要求:WorkerIdBitLength + SeqBitLength 不超过 22。
+❄ ***SeqBitLength***,序列数位长,默认值6,取值范围 [3, 21](建议不小于4),决定每毫秒生成的 ID 个数。规则要求:WorkerIdBitLength + SeqBitLength 不超过 22。
-❄ ***MinSeqNumber***,最小序列数,默认值5,取值范围 [5, MaxSeqNumber],每毫秒的前5个序列数对应编号0-4是保留位,其中1-4是时间回拨相应预留位,0是手工新值预留位。
+❄ ***MinSeqNumber***,最小序列数,默认值5,取值范围 [5, MaxSeqNumber],每毫秒的前5个序列数对应编号0-4是保留位,其中1-4是时间回拨相应预留位,0是手工新值预留位。
-❄ ***MaxSeqNumber***,最大序列数,设置范围 [MinSeqNumber, 2^SeqBitLength-1],默认值0,表示最大序列数取最大值(2^SeqBitLength-1),不为0时,用该设置值为最大序列数,一般无需设置最大序列数,除非多机共享WorkerId分段生成ID(此时还要正确设置最小序列数)。
+❄ ***MaxSeqNumber***,最大序列数,设置范围 [MinSeqNumber, 2^SeqBitLength-1],默认值0,表示最大序列数取最大值(2^SeqBitLength-1),不为0时,用该设置值为最大序列数,一般无需设置最大序列数,除非多机共享WorkerId分段生成ID(此时还要正确设置最小序列数)。
## 💎 常规集成