在我们的工作中,经常会遇到需要生成ID的场景,比如全链路日志中标识唯一请求或者说唯一链路的ID,用户注册过程中给用户分配的唯一账号ID,交易过程中的幂等值等。下面就说说几种常见的ID生成方法,也就是Id Maker的实现方案。
1. 数据库auto increment
我们很容易的想到,数据库中auto increment就是为了生成唯一主键ID的,而且数据库的ACID特性,保证该过程肯定是原子的,原子的意思就是不会有ID冲突即有两个ID生成的一模一样。该方法对于生成ID不是很频繁的场景还是比较适用的,一般是生成请求在几千次/s的情况下。
2. 使用redis自增命令
redis有个incrby的命令,通用点的叫法就是计数器,其实这种思路与mysql的自增并没有什么分别,不过因为存储方式的原因,使用redis做id maker可以在单位时间内生成更多的ID,redis的性能都是10W/s的。不过使用redis没有使用mysql那么简单,它需要在业务层面做一些保护。