【发布时间】:2013-05-21 14:18:44
【问题描述】:
我正在使用 Redis 的 INCR 为对象生成 ID。然后使用ZADD添加以ID为key的对象。
我是否需要担心是否有多个连接在执行同一代码块?在id:12 之后说,如果两个连接同时连接并且都使用id:13 添加对象,那么其中一个会丢失。
【问题讨论】:
标签: concurrency redis block blocking
我正在使用 Redis 的 INCR 为对象生成 ID。然后使用ZADD添加以ID为key的对象。
我是否需要担心是否有多个连接在执行同一代码块?在id:12 之后说,如果两个连接同时连接并且都使用id:13 添加对象,那么其中一个会丢失。
【问题讨论】:
标签: concurrency redis block blocking
由于 redis 是单线程的,这永远不会发生 - 一次只有一个客户端可以对数据库进行更改。
【讨论】:
正如 Jonatan Hedborg 所说,Redis 是单线程的,因此您永远不必担心两个客户端同时做某事。另一方面,如果您担心要按顺序运行 INCR 和 ZADD 命令,并希望确保在它们之间没有运行其他命令,您可以使用transactions,并保证您的命令运行作为一个单独的单元,中间没有任何东西。
【讨论】: