我计划将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中使用关键字来避免出现竞争情况。
synchronized
但是,对于PHP Web应用程序呢?
假设您要生成顺序ID,则可以使用Redis和INCR命令,而不必担心竞争条件。由于Redis(主要是单线程),因此可以确保每个请求都会从中获得其自己的唯一ID。
此外,您不需要检查id密钥的存在/初始化它,因为Redis会为您执行此操作(即,如果INCR不存在,则将首先创建该密钥并将其自动设置为0)。