为了支撑高并发以及访问量的增加通常会采取"分库分表的"的策略
分库分表的同时就需要保证数据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