草庐IT

php - Redis as unique atomic id generator - Web 应用程序避免竞争条件的线程安全方式

coder 2023-07-18 原文

我计划使用 redis 作为一个唯一的原子 id 生成器。但是,我担心可能会有来自多个浏览器的同时网络请求。我想知道,使以下操作原子化的常见做法是什么?

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

如果我在桌面应用程序或移动应用程序中,我会在 Java 中使用 synchronized 关键字来避免 race condition .

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

最佳答案

假设您要生成顺序 ID,您可以使用 Redis 和 INCR命令而不用担心竞争条件。由于 Redis(大部分)是单线程的,您可以放心,每个请求都会从中获得它自己的唯一 ID。

此外,您不需要检查 id 键的存在/初始化它,因为 Redis 会为您做这件事(即,如果您 INCR 一个不存在的键,它将首先创建并自动设置为 0)。

关于php - Redis as unique atomic id generator - Web 应用程序避免竞争条件的线程安全方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24028171/

有关php - Redis as unique atomic id generator - Web 应用程序避免竞争条件的线程安全方式的更多相关文章

随机推荐