雪花算法生成ID是一个64位长整型(但是也可以通过优化简短位数)
组成部分:
时间戳
机器ID
序列号
用途:
分布式系统唯一ID生成:解决数据库自增ID在分布式环境下的唯一性问题、避免UUID的无序性和性能问题
有序性保障:
时间戳部分保证ID全局趋势递增(适合数据库索引优化)、同一结点生成的ID按时间严格递增
高并发场景
可以用来生成用户唯一id,在做聊天室这个项目时我的用户id就是用雪花算法来完成的
uuid也可以直接用雪花算法完成
以下是生成14位的id代码
public class PasswordGenerator {
// 定义字符集(可根据需求调整)
private static final String LOWERCASE = "abcdefghijklmnopqrstuvwxyz";
private static final String UPPERCASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static final String NUMBERS = "0123456789";
private static final String SPECIALS = "!@#$%^&*()-_=+[]{}|;:,.<>?";
private static final SecureRandom RANDOM = new SecureRandom();
private static final int PASSWORD_LENGTH = 8;
// 禁止实例化
private PasswordGenerator() {
}
public static String generateStrongPassword() {
StringBuilder password = new StringBuilder(PASSWORD_LENGTH);
// 确保包含每种字符类型至少一个
password.append(randomChar(LOWERCASE));
password.append(randomChar(UPPERCASE));
password.append(randomChar(NUMBERS));
password.append(randomChar(SPECIALS));
// 填充剩余位置
String allChars = LOWERCASE + UPPERCASE + NUMBERS + SPECIALS;
for (int i = 4; i < PASSWORD_LENGTH; i++) {
password.append(randomChar(allChars));
}
// 打乱字符顺序
char[] chars = password.toString().toCharArray();
for (int i = 0; i < chars.length; i++) {
int randomIndex = RANDOM.nextInt(chars.length);
char temp = chars[i];
chars[i] = chars[randomIndex];
chars[randomIndex] = temp;
}
return new String(chars);
}
private static char randomChar(String charSet) {
return charSet.charAt(RANDOM.nextInt(charSet.length()));
}
}
可直接调用generateStrongPassword()方法来生成id
MD5是一种广泛使用的哈希函数,由 Ron Rivest 在 1991 年设计。它的主要作用是将任意长度的数据转换为 128位(16字节)固定长度的哈希值
核心特性:固定长度输出、不可逆性、抗碰撞性、计算速度快
MD5 的唯一合理用途:非安全场景的快速数据校验(如非敏感文件校验)
将用户的密码存入数据库时需用到