web开发工具之:一、UUID的介绍,java如何产生UUID,作为数据库的主键和加密算法的盐

文章目录

  • 前言
  • 一、UUID是什么
  • 二、java如何产生UUID
    • 1. 生成随机 UUID(Version 4)
    • 2. 通过指定的字符串生成 UUID
  • 三、UUID作为数据库主键
    • 1. 优点
    • 2. 缺点
  • 四、UUID作为加密的盐
  • 总结

前言

现在web开发中,很多使用UUID作为主键和加密的盐的,其实很简单,这里学习和介绍一下。

一、UUID是什么

UUID(Universally Unique Identifier,通用唯一标识符)是一种128位长的标识符,旨在在分布式系统中保证全局唯一性。UUID的格式通常用连字符分隔成五个部分,例如:

550e8400-e29b-41d4-a716-446655440000

UUID通常分为五个部分:

  1. 8位字符
  2. 4位字符
  3. 4位字符
  4. 4位字符
  5. 12位字符
    UUID有多个版本,不同版本使用不同的生成方法,常用的是版本1(基于时间戳和MAC地址)和版本4(基于随机数)。

二、java如何产生UUID

Java 提供了内置的工具类 java.util.UUID,可以轻松生成 UUID。以下是主要的方法:

1. 生成随机 UUID(Version 4)

import java.util.UUID;

public class UUIDExample {
    public static void main(String[] args) {
        UUID uuid = UUID.randomUUID();
        System.out.println("Random UUID: " + uuid);
    }
}

2. 通过指定的字符串生成 UUID

如果需要根据一个固定字符串生成 UUID,可以使用 fromString 方法:

UUID uuid = UUID.fromString("550e8400-e29b-41d4-a716-446655440000");
System.out.println("UUID from String: " + uuid);

三、UUID作为数据库主键

1. 优点

  1. 全局唯一性
    UUID 的核心特性是全局唯一,能够在分布式系统中避免 ID 冲突。这在以下场景中非常有用:
  • 多个服务或数据库实例同时生成主键。
  • 数据需要迁移或合并时避免主键冲突。
  1. 避免推测性攻击
    如果使用自增 ID(如数据库的 AUTO_INCREMENT),攻击者可能通过推测已知的 ID 来访问敏感数据。而 UUID 难以预测,提高了安全性。

  2. 去中心化生成 ID
    UUID 不依赖数据库生成器或其他中心化服务,可以直接在应用层生成。这减少了数据库负载,并支持离线操作。

  3. 兼容性和标准化
    UUID 是一种标准格式,许多系统和工具(如 REST API、日志系统)原生支持 UUID,便于集成。

2. 缺点

  1. 存储开销大
    UUID 是128位,相比传统的整数主键(通常32位或64位),需要更多的存储空间。

  2. 索引性能下降
    在关系型数据库中,UUID 的无序特性会导致 B+ 树索引分裂,降低性能。

  3. 可读性差
    UUID 不易记忆和识别,对于需要人工干预的场景不太友好。

四、UUID作为加密的盐

可以将UUID作为数据库主键ID,也同时作为加密的盐,方便开发。

	public static String getSalt() {
		return UUID.randomUUID().toString().replaceAll("-", "").substring(0, 20);
	}

总结

优点:UUID 适合分布式场景,支持全局唯一性和去中心化生成。
缺点:可能影响数据库性能,需要权衡存储与性能的需求。
Java生成:通过 UUID.randomUUID() 方法即可轻松生成 UUID。

你可能感兴趣的:(web开发,java,数据库)