分布式ID生成方案

本文介绍了几种分布式ID的生成方案,包括Redis生成ID、通过程序生成UUID、利用MySql生成UUID以及Twitter的Snowflake算法。详细阐述了每种方式的实现步骤、优缺点,并提供了测试过程中的控制台输出作为验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了支撑高并发以及访问量的增加通常会采取"分库分表的"的策略

分库分表的同时就需要保证数据ID的唯一性了!

一.Redis生成ID

1.测试准备:

①本地Redis一枚

②用于测试的Maven项目

 

2.代码及配置展示:

①GeneratedAppliacation.java

package com.howie.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @Author weihuanwen
 * @Date 2019/7/29 20:54
 * @Version 1.0
 */
@SpringBootApplication
public class GeneratedAppliacation {

    public static void main(String[] args) {
        SpringApplication.run(GeneratedAppliacation.class,args);
    }
}

②GeneratedByRedis.java

package com.howie.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author weihuanwen
 * @Date 2019/7/29 20:59
 * @Version 1.0
 */
@RestController
public class GeneratedByRedis {

    @Autowired
    private RedisTemplate redisTemplate;

    @GetMapping("/redis")
    public void generateIdByRedis(){
        Long id = redisTemplate.boundValueOps("id").increment();
        System.out.println("当前通过Redis生成ID ::: "+id);
    }
}

③application.yml

spring:
  application:
    name: idmaker
  redis:
    host: localhost
    port: 6379

④pom.xml

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
    </dependencies>

3.测试

①开启本地redis服务

②执行启动类

③访问请求路径:http://localhost:8080/redis

***控制台输出:

当前通过Redis生成ID ::: 1

④访问请求路径:http://localhost:8080/redis

***控制台输出:

当前通过Redis生成ID ::: 2

⑤通过redisTemplate.delete("id");可以清除指定key

4.优缺点

优点 缺点
不依赖于数据库,灵活方便,且性能优于数据库 需要引入Redis组件,增减了系统复杂度
数字ID天然排序,对分页或者需要排序的结果很有帮助 需要编码和配置的工作量比较大
  网络传输造成性能下降

二.通过程序生成UUID

1.测试准备

用于测试的Maven项目

2.代码展示:

***UUIDMaker.java

package com.howie.uuid;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.UUID;

/**
 * @Author weihuanwen
 * @Date 2019/7/30 11:24
 * @Version 1.0
 */
@RestController
public class UUIDMaker {

    @GetMapping("/uuid")
    public void generateUUID(){
        UUID uuidStr = UUID.randomUUID();
        String uuid = String.valueOf(uuidStr).replace("-", "");
        /*
            当前生成的UUID ::: 4fe85771d54e45cd9440641c70c5ff5f
            当前生成的UUID ::: 0500502db62349b0b20f4269f7338cc4
         */
        System.out.println("当前生成的UUID ::: "+uuid);
    }
}

***UUIDProgramApplication.java

package com.howie;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @Author weihuanwen
 * @Date 2019/7/30 11:18
 * @Version 1.0
 */
@SpringBootApplication
public class UUIDProgramApplication {

    public static void main(String[] args) {
        SpringApplication.run(UUIDProgramApplication.class,args);
    }
}

***application.yml

server:
  port: 9001

***id_generated_uuid_allway---->pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.or
课程简介:  本项目课程是一门极具综合性完整性的大型项目课程;课程项目的业务背景源自各类互联网公司对海量用户浏览行为数据业务数据分析的需求及企业数据管理、数据运营需求。 本课程项目涵盖数据采集与预处理、数据仓库体系建设、用户画像系统建设、数据治理(元数据管理、数据质量管理)、任务调度系统、数据服务层建设、OLAP即席分析系统建设等大量模块,力求原汁原味重现一个完备的企业级大型数据运营系统。  拒绝demo,拒绝宏观抽象,拒绝只讲不练,本课程高度揉理论与实战,并兼顾各层次的学员,真正从0开始,循序渐进,每一个步骤每一个环节,都会带领学员从需求分析开始,到逻辑设计,最后落实到每一行代码,所有流程都采用企业级解决方案,并手把手带领学员一一实现,拒绝复制粘贴,拒绝demo化的实现。并且会穿插大量的原创图解,来帮助学员理解复杂逻辑,掌握关键流程,熟悉核心架构。   跟随项目课程,历经接近100+小时的时间,从需求分析开始,到数据埋点采集,到预处理程序代码编写,到数仓体系搭建......逐渐展开整个项目的宏大视图,构建起整个项目的摩天大厦。  由于本课程不光讲解项目的实现,还会在实现过程中反复揉各种技术细节,各种设计思想,各种最佳实践思维,学完本项目并勤于实践的话,学员的收获将远远超越一个项目的具体实现,更能对大型数据系统开发产生深刻体悟,对很多技术的应用将感觉豁然开朗,并带来融会贯通能力的巨大飞跃。当然,最直接的收获是,学完本课程,你将很容易就拿到大数据数仓建设或用户画像建设等岗位的OFFER课程模块: 1. 数据采集:涉及到埋点日志flume采集系统,sqoop业务数据抽取系统等; 2. 数据预处理:涉及到各类字典数据构建,复杂结构数据清洗解析,数据集成,数据修正,以及多渠道数据的用户身份标识打通:ID-MAPPING等;3. 数据仓库:涉及到hive数仓基础设施搭建,数仓分层体系设计,数仓分析主题设计,多维分析实现,ETL任务脚本开发,ETL任务调度,数据生命周期管理等;4. 数据治理:涉及数据资产查询管理,数据质量监控管理,atlas元数据管理系统,atlas数据血缘管理等;5. 用户画像系统:涉及画像标签体系设计,标签体系层级关系设计,各类标签计算实现,兴趣类标签的衰减合并,模型标签的机器学习算法应用及特征提取、模型训练等;6. OLAP即席分析平台:涉及OLAP平台的整体架构设计,技术选型,底层存储实现,Presto查询引擎搭建,数据服务接口开发等;7. 数据服务:涉及数据服务的整体设计理念,架构搭建,各类数据访问需求的restapi开发等;课程所涉及的技术: 整个项目课程中,将涉及到一个大型数据系统中所用到的几乎所有主要技术,具体来说,包含但不限于如下技术组件:l Hadoopl Hivel HBasel SparkCore /SparkSQL/ Spark GRAPHX / Spark Mllibl Sqoopl Azkabanl Flumel lasal Kafkal Zookeeperl Solrl Prestop
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值