image.png

    这里可以注意下如果currentRange不为空了,那就是说这部分ID已经加载在内存中了,直接获取就可以了,而不会去查数据库了。机器重启这一段ID没了也就没了,无所谓。

    image.png

    image.png
    image.png

    数据库底层保证了value并不会存在并发安全问题,但实际上这里并不是每次都操作数据库,那取出来的那一段ID怎么保证并发安全呢?因为这一段ID是加载在每一台单独的机器上的,通过atomic保证了单机的并发安全,当有另外一台机器被请求时,它自己会生成一段新的ID放在自己的内存。这时候就会出现ID的浪费,比如A拥有2000~3000这段ID,B有3000~4000,当B重启了重启这段时间内3000~4000这段ID没有被用上,重启之后也不会被用上。
    image.png
    很明显这里使用了MySQL的乐观锁价值,这样性能会有所提升