猿问

线程安全增量值(以 db 为单位)

我遇到了一个问题,不知道如何用DB实现它。我在应用程序方面已经走了。

我有产品表,其中列被指定为 .当有人点击 API 时,我需要将端口分配给服务。它需要根据其产品名称递增 by。last_port_usedlast_port_id1

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

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

product

  • id

  • name

  • start_port //11000

  • end_port//11999

  • last_port_used// 11023

如何同时正确处理?


慕姐4208626
浏览 85回答 1
1回答

侃侃无极

您可以简单地执行以下操作:UPDATE products SET last_port_used = last_port_used+1WHERE&nbsp; &nbsp;id=...&nbsp; &nbsp; AND last_port_used < end_portRETURNING *这将以线程安全的方式执行更新,并且仅当端口号可用(last_port_used < end_port)并返回分配的端口时。如果需要锁定该行,还可以使用“选择以进行更新”。
随时随地看视频慕课网APP

相关分类

Go
我要回答