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

易安卓做网站电子商务网站建设收益举例

易安卓做网站,电子商务网站建设收益举例,中国著名的做网站渗透,网页小游戏在线玩儿欢迎来到本次博客的旅程#xff0c;今天我们要揭开一个神秘算法的面纱#xff0c;它就是在分布式系统中广受欢迎的——雪花算法#xff08;Snowflake#xff09;。这个算法不是用来预测雪花的形状#xff0c;而是用来生成唯一的ID#xff0c;保证在分布式系统中#xff…欢迎来到本次博客的旅程今天我们要揭开一个神秘算法的面纱它就是在分布式系统中广受欢迎的——雪花算法Snowflake。这个算法不是用来预测雪花的形状而是用来生成唯一的ID保证在分布式系统中每一个ID都是独一无二的。接下来我将带领大家一步一步深入了解这个神奇的算法并教你如何在Java中实现它。准备好了吗让我们开始吧 一、什么是雪花算法 雪花算法由Twitter在2010年发布用于生成分布式系统中的唯一ID。想象一下你有一大片雪花每一片都独一无二这就是雪花算法的工作原理。它生成的ID不仅唯一还按时间有序。 雪花算法生成的ID是一个64位的整数这个整数由以下几部分组成 1位的符号位总是0表示正数。41位的时间戳精确到毫秒可以使用约69年。10位的机器ID表示最多支持1024个节点。12位的序列号每毫秒可以生成4096个不同的ID。 这样组合在一起就形成了一个唯一的ID。 二、为什么要用雪花算法 在分布式系统中生成唯一的ID是一个常见问题。常见的方法有UUID和数据库自增ID但它们都有各自的缺点 UUID虽然唯一但长度较长不利于存储和索引。数据库自增ID需要依赖数据库不利于分布式扩展。 相比之下雪花算法生成的ID短小精悍按时间有序非常适合在分布式系统中使用。 三、雪花算法的工作原理 让我们通过一个示例详细了解雪花算法是如何工作的。 假设我们在2024年1月1日开始使用雪花算法生成ID机器ID为1每毫秒生成的序列号从0开始。 获取当前时间戳获取当前时间戳以毫秒为单位减去一个固定的时间起点例如2024年1月1日的时间戳得到时间差。拼接机器ID和序列号将机器ID和序列号拼接在时间戳之后形成一个64位的ID。 举个例子如果当前时间戳是1000毫秒机器ID是1序列号是0那么生成的ID就是 ID 时间戳 22 | 机器ID 12 | 序列号 1000 22 | 1 12 | 0 4194304000四、Java实现雪花算法 接下来我们在Java中实现雪花算法。这个实现包含了基本的ID生成逻辑以及一些必要的同步控制确保在高并发环境下的正确性。 public class SnowflakeIdGenerator {// 起始时间戳private final long twepoch 1577836800000L; // 2020-01-01// 机器ID所占的位数private final long workerIdBits 5L;// 数据中心ID所占的位数private final long datacenterIdBits 5L;// 支持的最大机器IDprivate final long maxWorkerId -1L ^ (-1L workerIdBits);// 支持的最大数据中心IDprivate final long maxDatacenterId -1L ^ (-1L datacenterIdBits);// 序列在ID中占的位数private final long sequenceBits 12L;// 机器ID向左移12位private final long workerIdShift sequenceBits;// 数据中心ID向左移17位private final long datacenterIdShift sequenceBits workerIdBits;// 时间戳向左移22位private final long timestampLeftShift sequenceBits workerIdBits datacenterIdBits;// 生成序列的掩码这里为4095private final long sequenceMask -1L ^ (-1L sequenceBits);private long workerId; // 机器IDprivate long datacenterId; // 数据中心IDprivate long sequence 0L; // 序列号private long lastTimestamp -1L; // 上次生成ID的时间戳// 构造函数public SnowflakeIdGenerator(long workerId, long datacenterId) {if (workerId maxWorkerId || workerId 0) {throw new IllegalArgumentException(String.format(worker Id cant be greater than %d or less than 0, maxWorkerId));}if (datacenterId maxDatacenterId || datacenterId 0) {throw new IllegalArgumentException(String.format(datacenter Id cant be greater than %d or less than 0, maxDatacenterId));}this.workerId workerId;this.datacenterId datacenterId;}// 生成IDpublic synchronized long nextId() {long timestamp timeGen();if (timestamp lastTimestamp) {throw new RuntimeException(String.format(Clock moved backwards. Refusing to generate id for %d milliseconds, lastTimestamp - timestamp));}if (lastTimestamp timestamp) {sequence (sequence 1) sequenceMask;if (sequence 0) {timestamp tilNextMillis(lastTimestamp);}} else {sequence 0L;}lastTimestamp timestamp;return ((timestamp - twepoch) timestampLeftShift) |(datacenterId datacenterIdShift) |(workerId workerIdShift) |sequence;}// 阻塞到下一个毫秒直到获得新的时间戳protected long tilNextMillis(long lastTimestamp) {long timestamp timeGen();while (timestamp lastTimestamp) {timestamp timeGen();}return timestamp;}// 返回当前时间以毫秒为单位protected long timeGen() {return System.currentTimeMillis();} }以上代码中SnowflakeIdGenerator 类实现了雪花算法的核心逻辑。让我们来逐步解释每一个部分。 变量定义定义了机器ID、数据中心ID、序列号以及时间戳等变量。构造函数初始化机器ID和数据中心ID并进行合法性检查。nextId 方法生成唯一ID使用同步关键字保证线程安全。tilNextMillis 方法阻塞直到下一毫秒以防止生成重复ID。timeGen 方法获取当前时间戳。 五、使用示例 现在我们可以创建 SnowflakeIdGenerator 的实例并生成唯一ID了。 public class Main {public static void main(String[] args) {SnowflakeIdGenerator idGenerator new SnowflakeIdGenerator(1, 1);for (int i 0; i 10; i) {long id idGenerator.nextId();System.out.println(Generated ID: id);}} }以上代码将生成10个唯一ID并打印到控制台。 六、结论 雪花算法在分布式系统中生成唯一ID方面表现卓越。通过详细的解释和Java实现希望你已经掌握了这个强大的工具。无论你是在开发大型分布式系统还是需要生成唯一ID雪花算法都是一个值得信赖的选择。 希望这篇博客不仅帮助你理解了雪花算法还能让你在实现过程中获得乐趣。如果你有任何问题或建议欢迎在评论区留言我们一起探讨 祝编码愉快
http://www.hkea.cn/news/14512381/

相关文章:

  • 公司o2o网站建设怎么到百度做网站
  • 合肥哪里有建站公司wordpress在页面里写文章
  • 网站建设与管理试卷答案外贸建站seo
  • 百度官网网站首页吉安市网站制作
  • 自己做网站下载怎么动画设计实训报告
  • 汕头网站制作推荐家居网站建设总结
  • 常德网站建设渠道品牌策划案范本
  • 物业公司名字大全免费seo做的好的网站有哪些
  • 网站推广有哪些举措国外外贸网站有哪些
  • 装修公司做宣传在哪个网站公司宣传片的拍摄
  • 西安公积金 网站建设邮箱或企业邮箱
  • 展示型网站建设报价衡水冀县做网站
  • 网站建设与管理课后总结郑州制作网站哪家好
  • 5G网站建设呼市互联网公司排名
  • 网站 提交入口iis怎么搭建asp网站
  • 孝南区城乡建设局网站名片设计模板
  • 重庆网站首页排名公司山东省建设厅电工证查询网站
  • 怎么创建卡密网站建设一个连接的网站
  • 网站制作代码大全做网站服务器用国外的
  • 网站建设制作公司思企互联有做足球裁判跑动数据的网站吗
  • 南昌网站开发培训学校广州百度推广开户
  • 怎么建设网站后台当下网站建设
  • 晋中推广型网站开发上海营销型网站开发
  • 专业建网站的学校网站 只做程序员
  • 昆明哪里做网站浙江住房城乡建设厅网站首页
  • 汕头搭建建站属于我的网页制作平台的是
  • 传统网站建设 成本网站建设的品牌
  • vs网站开发 怎么运行郑州信盈达嵌入式培训
  • 衡水做网站推广php做网站中下一步按钮
  • 国内设计师交流网站wordpress文章显示字数