当前位置: 首页 > news >正文

网站主页模板网络推广专员是做什么的

网站主页模板,网络推广专员是做什么的,wordpress编辑器换成经典模式,hpsocket 网站开发文章目录 1. UUID2. 数据库序列或自增ID3. 时间戳 随机数/序列4. 分布式唯一ID生成方案 几种常见的解决方案 UUID 实例代码数据库序列或自增ID时间戳 随机数/序列分布式唯一ID生成方案 Snowflake ID结构类定义和变量初始化构造函数ID生成方法辅助方法 在 Spring Boot 中设计… 文章目录 1. UUID2. 数据库序列或自增ID3. 时间戳 随机数/序列4. 分布式唯一ID生成方案 几种常见的解决方案 UUID 实例代码数据库序列或自增ID时间戳 随机数/序列分布式唯一ID生成方案 Snowflake ID结构类定义和变量初始化构造函数ID生成方法辅助方法 在 Spring Boot 中设计一个订单号生成系统时需考虑生成的订单号的唯一性、可扩展性及业务相关性。以下是几种常见的解决方案及相应的示例代码 1. UUID 使用 UUID 生成唯一的订单号形式为 8-4-4-4-12 的字符串例如 123e4567-e89b-12d3-a456-426614174000。优点是简单缺点是较长且不易记忆。 实例代码 import java.util.UUID;public class UUIDGenerator {public static String generateUUID() {return UUID.randomUUID().toString();}public static void main(String[] args) {System.out.println(Generated UUID: generateUUID());} }2. 数据库序列或自增ID 利用数据库的序列或自增ID生成唯一的订单号常见于单体应用。 实例代码 Entity public class Order {IdGeneratedValue(strategy GenerationType.AUTO)private Long id;// 其他属性 }数据库示例 PostgreSQL: CREATE SEQUENCE order_id_seq START WITH 1 INCREMENT BY 1; CREATE TABLE orders (order_id bigint NOT NULL DEFAULT nextval(order_id_seq), order_data text);MySQL: CREATE TABLE orders (order_id INT AUTO_INCREMENT, order_data TEXT, PRIMARY KEY (order_id));3. 时间戳 随机数/序列 结合时间戳与随机数生成订单号增强可读性与业务相关性。 实例代码 import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.ThreadLocalRandom;public class OrderNumberGenerator {private static final SimpleDateFormat dateFormat new SimpleDateFormat(yyyyMMddHHmmss);private static final int RANDOM_NUM_BOUND 10000;public static String generateOrderNumber(String prefix) {String timestamp dateFormat.format(new Date());int randomNumber ThreadLocalRandom.current().nextInt(RANDOM_NUM_BOUND);return prefix timestamp String.format(%04d, randomNumber);}public static void main(String[] args) {System.out.println(Generated Order Number: generateOrderNumber(ORD));} }4. 分布式唯一ID生成方案 使用 Snowflake 算法生成唯一 ID其中包含时间戳、数据中心ID、机器ID和序列号支持分布式系统中的 ID 唯一性和有序性。 Snowflake ID 结构 1 位符号位41 位时间戳10 位数据中心 ID 和机器 ID12 位序列号 实现示例 public class SnowflakeIdGenerator {private long datacenterId; // 数据中心IDprivate long machineId; // 机器IDprivate long sequence 0L; // 序列号private long lastTimestamp -1L; // 上一次时间戳private final long twepoch 1288834974657L;private final long datacenterIdBits 5L;private final long machineIdBits 5L;private final long maxDatacenterId -1L ^ (-1L datacenterIdBits);private final long maxMachineId -1L ^ (-1L machineIdBits);private final long sequenceBits 12L;private final long machineIdShift sequenceBits;private final long datacenterIdShift sequenceBits machineIdBits;private final long timestampLeftShift sequenceBits machineIdBits datacenterIdBits;private final long sequenceMask -1L ^ (-1L sequenceBits);public SnowflakeIdGenerator(long datacenterId, long machineId) {if (datacenterId maxDatacenterId || datacenterId 0) {throw new IllegalArgumentException(datacenterId cant be greater than %d or less than 0);}if (machineId maxMachineId || machineId 0) {throw new IllegalArgumentException(machineId cant be greater than %d or less than 0);}this.datacenterId datacenterId;this.machineId machineId;}public synchronized long nextId() {long timestamp System.currentTimeMillis();if (timestamp lastTimestamp) {throw new RuntimeException(Clock moved backwards. Refusing to generate id);}if (lastTimestamp timestamp) {sequence (sequence 1) sequenceMask;if (sequence 0) {timestamp tilNextMillis(lastTimestamp);}} else {sequence 0L;}lastTimestamp timestamp;return ((timestamp - twepoch) timestampLeftShift) |(datacenterId datacenterIdShift) |(machineId machineIdShift) |sequence;}private long tilNextMillis(long lastTimestamp) {long timestamp System.currentTimeMillis();while (timestamp lastTimestamp) {timestamp System.currentTimeMillis();}return timestamp;} } 下面是对这段代码的逐行解释 类定义和变量初始化 private long datacenterId; 定义数据中心ID。private long machineId; 定义机器ID。private long sequence 0L; 序列号用于同一毫秒内生成多个ID时区分这些ID。private long lastTimestamp -1L; 上一次生成ID的时间戳。 以下是Snowflake算法的一些关键参数 private final long twepoch 1288834974657L; 系统的起始时间戳这里是Snowflake算法的作者选择的一个固定的时间点2010-11-04 09:42:54.657 GMT。private final long datacenterIdBits 5L; 数据中心ID所占的位数。private final long machineIdBits 5L; 机器ID所占的位数。private final long maxDatacenterId -1L ^ (-1L datacenterIdBits); 数据中心ID的最大值这里通过位运算计算得出。private final long maxMachineId -1L ^ (-1L machineIdBits); 机器ID的最大值同样通过位运算得出。private final long sequenceBits 12L; 序列号占用的位数。 以下是一些用于位运算的参数用于计算最终的ID private final long machineIdShift sequenceBits; 机器ID的偏移位数。private final long datacenterIdShift sequenceBits machineIdBits; 数据中心ID的偏移位数。private final long timestampLeftShift sequenceBits machineIdBits datacenterIdBits; 时间戳的偏移位数。private final long sequenceMask -1L ^ (-1L sequenceBits); 用于保证序列号在指定范围内循环。 构造函数 构造函数SnowflakeIdGenerator(long datacenterId, long machineId)接收数据中心ID和机器ID作为参数并对这些参数进行校验确保它们在合法范围内。 ID生成方法 public synchronized long nextId()是生成ID的核心方法使用synchronized保证线程安全。 首先获取当前时间戳。如果当前时间戳小于上一次生成ID的时间戳抛出异常因为时钟回拨会导致ID重复。如果当前时间戳等于上一次的时间戳即同一毫秒内通过增加序列号生成不同的ID如果序列号溢出超过最大值则等待到下一个毫秒。如果当前时间戳大于上一次的时间戳重置序列号为0。最后将时间戳、数据中心ID、机器ID和序列号按照各自的偏移量左移然后进行位或运算组合成一个64位的ID。 辅助方法 private long tilNextMillis(long lastTimestamp)是一个辅助方法用于在序列号溢出时等待直到下一个毫秒。
http://www.eeditor.cn/news/118965/

相关文章:

  • 怎么注册一个网站网站制作论文参考文献
  • 公司网页网站如何做网络工程师的发展前景
  • 大连网站制作赞ls15227网站开发很难么
  • app开发学习网站辽宁网站建站系统哪家好
  • 网站seo方法美橙网站建设怎么做
  • 网站建设制作设计平台1 分析seo做的不好的网站
  • 给你一个网站怎么优化网络公司是干什么的
  • 新余网站制作贵阳网站设计案例
  • 法拍重庆网站二级域名怎么注册
  • 网站建设合同书样本有什么好看的网站资源
  • 网站建设公司源码 aspwordpress 视频教程
  • 温江区网站建设建站外贸网站建设
  • 威海住房和城乡建设局官方网站fizz wordpress
  • 怎样用php做网站网站的面包屑怎么做的
  • 做一个跨境电商网站青海中小企业网站建设
  • 成都免费建网站垫江网站建设费用
  • 做犯法任务的网站公司网站怎么维护
  • 广西柳州网站建设小程序公司从搜索引擎访问网站
  • 河北建设厅网站6汕头建设网站的公司
  • 怎么看网站建设企业推广平台排行榜
  • 中国城乡住房建设部网站做网站是如果盈利的
  • 网站怎么才可以不备案域名的网站建设方案书
  • 长沙微网站开发世界互联网峰会官网
  • 邯郸有没有专门做写字楼的网站有什么国企是做网站的
  • 天津建设网站的公司简介佛山新网站建设服务
  • 深圳福田住房和建设局网站官网餐饮网站建设怎样
  • 安丘网站建设梅河口网站开发
  • 合水口网站建设做自己的网站难不难
  • 广州骏域网站建设专家手机电脑版重庆网站建设夹夹虫公司
  • 天津门户网站开发怎样做电商卖货