一尘不染

Redis作为唯一的原子ID生成器-Web应用程序避免竞争情况的线程安全方法

redis

我计划将Redis用作唯一的原子ID生成器。但是,我担心的是,可能会有来自多个浏览器的类似Web请求。我想知道,使以下操作原子化的通常做法是什么?

get id from redis
if id is not found
    insert id as 0 into redis
else
    store the id in a variable
    increase id by one
    store the new id back to redis

如果我使用的是台式机应用程序或移动应用程序,则可以synchronized在Java中使用关键字来避免出现竞争情况

但是,对于PHP Web应用程序呢?


阅读 293

收藏
2020-06-20

共1个答案

一尘不染

假设您要生成顺序ID,则可以使用Redis和INCR命令,而不必担心竞争条件。由于Redis(主要是单线程),因此可以确保每个请求都会从中获得其自己的唯一ID。

此外,您不需要检查id密钥的存在/初始化它,因为Redis会为您执行此操作(即,如果INCR不存在,则将首先创建该密钥并将其自动设置为0)。

2020-06-20