首页 > 解决方案 > db中的线程安全增量值

问题描述

我遇到了一个问题,不知道如何用 DB 来实现它。我在应用程序方面有 go lang。

我有列分配为的产品表last_port_used。当有人点击 api 时,我需要为服务分配端口。它需要根据其产品名称增加last_port_idby 。1

一种可能的解决方案是使用 redis 服务器并在那里同步这个值。因为我们没有redis。我想通过psql.

我阅读了更多关于锁的信息,我认为我需要ACCESS EXCLUSIVE锁。这是正确的方法吗?

product

如何同时正确处理?

标签: postgresqlgo

解决方案


你可以简单地做:

UPDATE products SET last_port_used = last_port_used+1
WHERE   id=...
    AND last_port_used < end_port
RETURNING *

这将以线程安全的方式执行更新,并且仅当端口号可用时(last_port_used < end_port)并返回分配的端口。

如果需要锁定行,也可以使用 SELECT FOR UPDATE。


推荐阅读