我计划使用 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 中要避免的关键字竞争条件 http://en.wikipedia.org/wiki/Race_condition.
但是,对于 PHP Web 应用程序又如何呢?
假设您希望生成连续的 id,您可以使用 Redis 和INCR http://redis.io/commands/incr命令而不用担心竞争条件。由于 Redis(大部分)是单线程的,因此您可以放心,每个请求都会从中获得自己的唯一 ID。
此外,您不需要检查 id 键是否存在/初始化它,因为 Redis 会为您执行此操作(即,如果您 INCR 一个不存在的键,它将首先创建并自动设置为 0)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)