分布式ID生成方案

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

分库分表的同时就需要保证数据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.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <p
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值