网上工伤做实网站做网站都要掌握什么

news/2025/9/30 0:00:43/文章来源:
网上工伤做实网站,做网站都要掌握什么,金水区网站建设,黄页网站 php文章目录 分布式IDUUIDSnowflake算法数据库自增IDLeaf算法Redis自增ID 分布式ID 在我们业务数据量不大的时候#xff0c;单库单表完全可以支撑现有业务#xff0c;数据再大一点搞个MySQL主从同步读写分离也能对付。但随着数据日渐增长#xff0c;主从同步也扛不住了#x… 文章目录 分布式IDUUIDSnowflake算法数据库自增IDLeaf算法Redis自增ID 分布式ID 在我们业务数据量不大的时候单库单表完全可以支撑现有业务数据再大一点搞个MySQL主从同步读写分离也能对付。但随着数据日渐增长主从同步也扛不住了就需要对数据库进行分库分表。在分库之后 数据遍布在不同服务器上的数据库数据库的自增主键已经没办法满足生成的主键唯一了这个时候就需要生成分布式ID了。 在分布式系统中分布式ID的使用场景主要包括高并发请求、跨服务的数据一致性和多节点的唯一标识符生成。例如在电商平台中为每个订单生成唯一的ID是非常重要的。一个高并发的电商系统可能有多个服务器同时处理订单请求使用分布式ID可以避免ID冲突。类似地在微服务架构中各个服务可能需要生成唯一的标识符来标记请求或数据记录。分布式ID使得这些标识符在整个系统中保持唯一从而避免数据混乱或冲突。 分布式ID生成一般都需要满足这些条件 全局唯一必须保证ID是全局性唯一的这是基本要求高性能高可用低延时ID生成响应要块否则反倒会成为业务瓶颈高可用100%的可用性是骗人的但是也要无限接近于100%的可用性趋势递增如果要把ID存放在数据库的话ID的有序性可以提升数据库写入速度。并且很多时候我们还很有可能会直接通过ID来进行排序安全分布式ID中不包含敏感信息 有以下常见几种实现分布式ID方式 实现方式描述优点缺点实际使用场景UUID生成128位长的唯一标识符通常表示为32个十六进制字符。实现简单生成速度快。ID较长可能影响性能和存储。用户标识、数据跟踪、临时唯一标识。Snowflake算法生成64位长的ID包括时间戳、机器ID和序列号。高效支持高并发生成的ID有序。需要配置机器ID时间回退可能引发问题。订单ID生成、分布式系统中的唯一标识符。数据库自增ID依赖数据库的自增字段生成唯一ID。实现简单适用于单数据库或小规模环境。在高并发环境下可能成为瓶颈存在单点故障风险。传统数据库应用如用户ID、订单ID。Leaf算法提供高性能的ID生成服务分为ID生成器和ID分片。高性能支持高并发。配置和维护复杂。高并发系统中的唯一ID生成如支付系统中的交易ID。Redis自增ID使用Redis的自增功能生成唯一ID。高性能支持高并发。依赖Redis服务可能成为单点故障。高并发环境中的全局唯一ID生成如广告投放系统。 处理上述这些方案外利用系统当前时间也能实现。一般如果用这个方案是将当前时间跟很多其他的业务字段拼接起来作为一个ID如果业务上你觉得可以接受那么也是可以的。你可以将别的业务字段值跟当前时间拼接起来组成一个全局唯一的编号。 UUID UUID的全称是 “Universally Unique Identifier”即通用唯一标识符。UUID是一种128位长的唯一标识符通常表示为32个十六进制字符分为5组形式为xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx其中每个x表示一个十六进制数字。 UUID的生成算法有不同版本每个版本采用不同的方法来确保唯一性。 UUIDv1通过结合当前时间戳和机器的MAC地址生成唯一标识符。生成过程涉及获取当前时间的100纳秒级别精度的时间戳加上机器的MAC地址以及一个序列号用于处理同一时间生成多个UUID的情况。时间戳和MAC地址确保了UUID在全球范围内的唯一性。此版本的UUID在时间上有序但可能会暴露生成UUID的计算机信息适用于需要时间排序的场景。UUIDv3基于指定的名称和命名空间生成UUID。生成过程中将名称与命名空间拼接后通过MD5哈希算法计算出一个128位的哈希值然后将其格式化为UUID。这种方法确保了相同的名称和命名空间组合总是生成相同的UUID。UUIDv3适用于需要根据相同名称和命名空间生成一致UUID的场景例如生成固定格式的ID。UUIDv4使用随机数生成128位的UUID生成过程包括生成122位的随机数并在UUID中设置特定的版本号4和变体位。这种UUID生成方法完全依赖随机数来保证唯一性具有很高的随机性生成过程简单且效率高。UUIDv4适合需要高性能和随机性的场景如生成临时标识符或分布式系统中的唯一ID。UUIDv5类似于UUIDv3但使用SHA-1哈希算法代替MD5来生成UUID。生成过程中将指定的名称和命名空间拼接后通过SHA-1计算出一个160位的哈希值然后将其格式化为UUID设置版本号为5。这种方法比UUIDv3更安全适合需要基于名称生成UUID的场景同时提供了更强的哈希安全性。 在实际开发中UUIDv4是最常用的UUID版本。UUIDv4生成的UUID通过随机数确保唯一性不依赖于时间戳或机器信息。在Java中可以使用java.util.UUID类来生成UUIDv4。 public class UUIDExample {public static void main(String[] args) {// 生成一个UUIDv4UUID uuid UUID.randomUUID();System.out.println(生成的UUIDv4: uuid.toString());} }UUID一般不会作为主键使用因为UUID太长了、占用空间大作为主键性能太差了且UUID不具有有序性会导致B树索引在写的时候有过多的随机写操作总之就是无序的性能开销大。适合于随机生成个什么文件名、编号之类的。 Snowflake算法 Snowflake算法又称雪花算法是一种由Twitter开发的分布式ID生成算法用于生成唯一的64位ID。这种算法特别适合于分布式系统能够在多个节点上高效地生成唯一ID。 算法思路是是把一个64位的long型的ID1个bit是不用的用其中的41bits作为毫秒数用10bits作为工作机器ID12bits作为序列号。 位数范围描述0 - 1 bit符号位1 - 41 bits时间戳部分42 - 47 bits数据中心ID48 - 63 bits工作机器ID64 - 75 bits序列号 0-1bit不用为啥呢因为二进制里第一个bit为如果是1那么都是负数但是我们生成的ID都是正数所以第一个bit统一都是01-41bit表示的是时间戳单位是毫秒。41bits可以表示的数字多达2^41 - 1也就是可以标识2^41 - 1个毫秒值换算成年就是表示69年的时间42-47bit记录工作机器ID代表的是这个服务最多可以部署在2^10台机器上也就是1024台机器。但是10bits里5个bits代表机房ID5个bits代表机器ID。意思就是最多代表2^5个机房32 个机房每个机房里可以代表 2^5 个机器32 台机器64-75bit这个是用来记录同一个毫秒内产生的不同ID12bits可以代表的最大正整数是2^12 - 1 4096 也就是说可以用这个12bits代表的数字来区分同一个毫秒内的4096个不同的ID 雪花算法相对来说还是比较靠谱的毫秒数在高位自增序列在低位整个ID都是趋势递增的。不依赖数据库等第三方系统以服务的方式部署稳定性更高生成ID的性能也是非常高的能达到百万计QPS。但是雪花算法强依赖时钟如果机器上时钟回拨会导致发号重复或者服务会处于不可用状态。为了规避雪花算法的缺点一些国内的大厂做了改进像美团的Leaf百度的uid-generator都是基于雪花算法来实现的。所以你要真是搞分布式 ID生成如果是高并发啥的那么用这个应该性能比较好一般每秒几万并发的场景也足够用了。 以下是一个Snowflake算法的简化Java实现实际开发中可能直接引用第三方库。 public class SnowflakeIdGenerator {private final long epoch 1622548800000L; // 自定义Epoch时间private final long dataCenterIdBits 5L; // 数据中心ID位数private final long workerIdBits 5L; // 工作机器ID位数private final long sequenceBits 12L; // 序列号位数private final long maxDataCenterId -1L ^ (-1L dataCenterIdBits);private final long maxWorkerId -1L ^ (-1L workerIdBits);private final long sequenceMask -1L ^ (-1L sequenceBits);private long dataCenterId; // 数据中心IDprivate long workerId; // 工作机器IDprivate long sequence 0L; // 序列号private long lastTimestamp -1L; // 上次生成ID的时间戳public SnowflakeIdGenerator(long dataCenterId, long workerId) {if (dataCenterId maxDataCenterId || dataCenterId 0) {throw new IllegalArgumentException(DataCenterId超出范围);}if (workerId maxWorkerId || workerId 0) {throw new IllegalArgumentException(WorkerId超出范围);}this.dataCenterId dataCenterId;this.workerId workerId;}public synchronized long generateId() {long timestamp System.currentTimeMillis();if (timestamp lastTimestamp) {throw new RuntimeException(系统时间回退);}if (timestamp lastTimestamp) {sequence (sequence 1) sequenceMask;if (sequence 0) {timestamp waitNextMillis(timestamp);}} else {sequence 0L;}lastTimestamp timestamp;return ((timestamp - epoch) (dataCenterIdBits workerIdBits sequenceBits)) |(dataCenterId (workerIdBits sequenceBits)) |(workerId sequenceBits) |sequence;}private long waitNextMillis(long lastTimestamp) {long timestamp System.currentTimeMillis();while (timestamp lastTimestamp) {timestamp System.currentTimeMillis();}return timestamp;} }数据库自增ID 在分布式系统中使用数据库自增ID作为分布式ID通常涉及在一个集中式的数据库系统中生成自增ID然后将其分发到分布式系统的各个节点。 在数据库中创建一个自增ID的表。每次需要新的ID时向这个表插入一条记录然后获取即可。用数据库的自增ID功能如MySQL的AUTO_INCREMENTPostgreSQL的SERIAL等用来保证ID的唯一性和递增性。 以下是一个简化的Java代码示例演示如何从数据库中获取自增ID public class DistributedIdGenerator {private Connection connection;public DistributedIdGenerator(String dbUrl, String user, String password) throws Exception {connection DriverManager.getConnection(dbUrl, user, password);}public long getNextId() throws Exception {Statement statement connection.createStatement();// 假设存在一个名为id_generator的表其中包含一个自增列next_idResultSet resultSet statement.executeQuery(SELECT next_id FROM id_generator FOR UPDATE);if (resultSet.next()) {long nextId resultSet.getLong(next_id);// 更新IDstatement.executeUpdate(UPDATE id_generator SET next_id next_id 1);return nextId;} else {throw new RuntimeException(无法获取新的ID);}}public static void main(String[] args) {try {DistributedIdGenerator idGenerator new DistributedIdGenerator(jdbc:mysql://localhost:3306/mydb, user, password);long newId idGenerator.getNextId();System.out.println(生成的ID: newId);} catch (Exception e) {e.printStackTrace();}} }往一个库的一个表里插入一条没什么业务含义的数据获取一个数据库自增的一个ID拿到这个ID之后再往对应的分库分表里去写入。缺点是高并发存在瓶颈优点是简单方便。适用于并发不高但是数据量太大导致的分库分表扩容可能每秒最高并发最多就几百那么就走单独的一个库和表生成自增主键即可。 Leaf算法 Leaf算法是一种用于生成分布式唯一ID的算法由美团点评开发。 采用了基于Snowflake的设计思路但将ID生成和ID管理分离。Leaf-Server负责分配ID段Leaf-Worker负责在本地生成ID。 Leaf算法通过将ID生成和ID段管理分开能够高效地生成ID。Leaf-Worker本地生成ID减少了对中心服务器的依赖。通过分布式的Leaf-ServerLeaf算法支持高可用的ID生成。即使部分Leaf-Server出现故障系统仍然可以继续生成ID。 Leaf算法的核心思想是将ID生成和ID管理分开利用ID段来减少对中心服务器的压力。 Leaf-Server预分配一段ID给Leaf-Worker。ID段通常包括一个起始ID和一个结束IDLeaf-Worker在该范围内生成ID。Leaf-Worker从分配的ID段中生成ID并维护一个指针或游标来跟踪当前使用的ID。每次生成ID时Leaf-Worker都会从本地的ID段范围中获取新的ID。当Leaf-Worker用完当前ID段或需要更多ID时它会向Leaf-Server请求一个新的ID段。Leaf-Server根据当前的负载和可用资源分配新的ID段。 以下是一个简化的Java代码示例展示如何使用Leaf算法生成ID public class LeafWorker {private final long segmentStart;private final long segmentEnd;private final AtomicLong cursor;public LeafWorker(long segmentStart, long segmentEnd) {this.segmentStart segmentStart;this.segmentEnd segmentEnd;this.cursor new AtomicLong(segmentStart);}public long getNextId() {long id cursor.getAndIncrement();if (id segmentEnd) {throw new RuntimeException(ID超出段范围);}return id;} }public class LeafServer {private long currentSegmentStart 0;private long segmentSize 1000; // 每次分配的ID段大小public synchronized LeafWorker requestSegment() {long start currentSegmentStart;long end start segmentSize - 1;currentSegmentStart end 1;return new LeafWorker(start, end);} }public class Main {public static void main(String[] args) {LeafServer leafServer new LeafServer();LeafWorker leafWorker leafServer.requestSegment();for (int i 0; i 10; i) {System.out.println(生成的ID: leafWorker.getNextId());}} }在需要高效生成唯一ID的分布式环境中Leaf算法提供了高性能和高可用性。它适用于大规模应用和系统其中ID生成的需求很高且需要支持分布式架构。 Redis自增ID Redis自增ID是基于对数据库自增的改进原理就是利用Redis的INCR命令实现ID的原子性自增。不依赖于数据库灵活方便且性能优于数据库但是如果系统中没有Redis还需要引入新的组件会增加系统复杂度。 Redis是内存数据库INCR和INCRBY命令都是原子操作执行速度非常快。Redis在单节点模式下可能成为单点故障。如果Redis服务出现故障可能会影响ID生成。 以下是一个使用Java和Redis实现自增ID生成的示例代码 public class RedisIdGenerator {private Jedis jedis;private String key;public RedisIdGenerator(String redisHost, int redisPort, String key) {this.jedis new Jedis(redisHost, redisPort);this.key key;}public long getNextId() {return jedis.incr(key);}public static void main(String[] args) {RedisIdGenerator idGenerator new RedisIdGenerator(localhost, 6379, unique_id);for (int i 0; i 10; i) {System.out.println(生成的ID: idGenerator.getNextId());}} }Redis是内存数据库具有极高的性能Redis也能够满足实时系统需要快速生成唯一ID的情况。对于不需要复杂ID生成逻辑的应用场景Redis自增ID是一种简单且高效的解决方案。例如为日志条目生成唯一的ID方便日志的管理和查询。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/922348.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

规范12388举报网站建设管理2022年列入传销组织最新骗法

http://www.samsung.com/global/business/semiconductor/mobilesocProductDown.do?userIdtechinfinicores.com转载于:https://www.cnblogs.com/zd_ad/archive/2010/11/16/1878238.html

newDay06

1.今天课程和事比较多,背背单词,随便看了看 2.明天估计也没啥时间,上午两节课,下午直接回家了 3.问题,没啥的

买卖股票当中的最佳时机

买卖股票当中的最佳时机题目 给定一个数组$ prices $,它的第 $i $个元素 \(prices[i]\) 表示一支给定股票第 $i $天的价格。 你只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票。设计一个算法…

Java 与智慧交通枢纽:机场与地铁的数字化管理

一、引言 交通枢纽是现代城市运行的核心节点,承担着人流与物流的高效组织与调度。尤其是 机场与地铁系统,每天需要处理数以万计甚至数十万计的乘客流量,同时保障安全与效率。传统交通枢纽在 运力调度、信息透明度、…

PWN手的成长之路-04-PicoCTF_2018_shellcode

先 nc 连接服务器,交互一下看看有什么效果。发现是让我们输入一个字符,之后程序再打印出来。file 查看文件。32位的 ELF 可执行文件。checksec 查看文件安全属性。没开任何保护。NX 保护未开启,表明栈内存可被注入并…

最高人民法院新劳动争议司法解释一 理解与适用

最高人民法院新劳动争议司法解释一 理解与适用 第十六条 劳动争议仲裁机构作出仲裁裁决后,当事人对裁决中的部分事项不服,依法提起诉讼的,劳动争议仲裁裁决不发生法律效力。 【条文主旨】 本条是关于当事人对仲裁裁…

wordpress照片管理系统宁波如何做抖音seo搜索优化

线程池 构造函数处理过程拒绝策略JDK 内置的拒绝策略 Executors类实现线程池线程池大小设置 通过复用已创建的线程,降低资源损耗、线程可以直接处理队列中的任务加快响应速度、同时便于统一监控和管理。 构造函数 /*** 线程池构造函数7大参数*/ public ThreadPoolE…

个人博客网站设计模板技能培训学校

一、为什么要用分布式 ID? 在说分布式 ID 的具体实现之前,我们来简单分析一下为什么用分布式 ID?分布式 ID 应该满足哪些特征? 1、什么是分布式 ID? 拿 MySQL 数据库举个栗子: 在我们业务数据量不大的时…

西地那非片的副作用荆州seo技术厂家

配置步骤如下: 登陆或切换到root用户下;因为只有root用户才具有权限进行用户的添加,使用命令sudo su,切换为管理员用户添加用户 adduser -m youuser,并且在home路径下创建同名的用户文件夹passwd youuser,…

linux 做网站用哪个版本小地方的旅游网站怎么建设

题目描述 长整数排序。输入n 然后输入n个位数不超过100位的大整数,输入的整数可能含有前导0。将这n个长整数排序后输出,输出不含前导0。int greater(char *s1, char *s2){若s1指向的整数大于s2指向的整数,返回一个正整数;若s1指向的整数小于s…

深圳 网站建设设计网站建设pdf 下载

adb对于安卓移动端来说,是个非常重要的调试工具。本篇介绍常用的adb指令 文章目录 一、启动应用:adb shell am start二、使用浏览器打开指定网址:adb shell am start三、杀死应用进程adb shell am force-stop/adb shell am kill四、删除应用所…

免费商城网站制作项目推广网

图片来源: https://www.lvhang.site/docs/dotnettimeline 即梦AI - 一站式AI创作平台 一、历史发展脉络 在早期的微软平台编程中,常用的编程语言有 Visual Basic、C、C。到了 20 世纪 90 年代末,Win32 API、MFC(Microsoft Found…

网站备案 多少钱淘宝网客网站建设

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. 运行 cp -rf 命令时依旧给出无数提示,要求确认,很是麻烦,如下图: 2. 可能原因&#…

哪个网站可以做线上翻译赚钱免费帮忙做网站

虚拟机centos7安装docker springboot项目调试 1,安装docker, 参考菜鸟教程 Docker 要求 CentOS 系统的内核版本高于 3.10 1,查看系统版本信息 [root@runoob ~]# uname -r 2,移除旧的版本,切换到root用户下操作 sudo yum remove docker \ d…

US$1045 Xhorse VVDI2 VAG Full License VV01 VV02 VV03 VV04 VV05

Xhorse VVDI2 VAG Full License VV01 VV02 VV03 VV04 VV05License including:(VV-01) VAG 4th Generaion Immobilizer Yes(VV-02) VAG 5th Generaion Immobilizer Yes(VV-03) VAG OBD 48 Copy Yes(VV-04) ID48 96bit c…

网站开发知识产权推广咨询

下载嵌入式Python后解压 https://www.python.org/ftp/python/3.12.9/python-3.12.9-embed-amd64.zip cd python-3.12.9-embed-amd64 安装 pip .\python.exe .\get-pip.py 放开限制 嵌入式 Python 为了减少体积,默认会有一些限制。你需要编辑 python312._pth 文…

PyPI维护者遭遇钓鱼攻击:假冒登录网站威胁开源供应链安全

Python软件基金会警告针对PyPI维护者的钓鱼活动,攻击者使用伪造登录网站窃取凭证,威胁开源软件供应链安全。攻击采用专业设计的假冒网站和社交工程手段,可能引发广泛的软件供应链风险。针对PyPI维护者的钓鱼活动使用…

山西建设厅网站查不了企业网站建设网站模板

语法 [capture](parameters) mutalble->return-type{statement};capture [] :什么也不捕获[] : 按值的方式捕获所有变量[&] : 按引用方式捕获所有变量[boo] : 值捕获boo的值[,&a] : 按值捕获所有局部变量,按引用捕获变量a[,&…

冷链物流网站怎样做好网络推广工作

C到C C相比C语言来说,多了两个核心,五个内容:1、面向对象的思维;2、模板(泛型编型)1.bool 2.引用 3.内联 4.重载 5.缺省参数变量 数据类型 bool 布尔 占1个字节 取值:true false bool isMax(i…

米卓网站建设合肥最好的网站建设

初始化仓库 方法一: 新建一个文件夹,进入文件夹内部操作 1、右键--> 在这里创建Git 版本库 注意: 不要直接在桌面上操作,否则桌面就是一个仓库 方法二: 1、右键-->Git GUI here 方法三: 命令行模式 1、 git init 创建完毕仓库,我们发现,此时我们创建的文件夹下…