为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕姐4208626 2022-08-09 20:37:52
我遇到了一个问题,不知道如何用DB实现它。我在应用程序方面已经走了。我有产品表,其中列被指定为 .当有人点击 API 时,我需要将端口分配给服务。它需要根据其产品名称递增 by。last_port_usedlast_port_id1一种可能的解决方案是使用redis服务器并在那里同步此值。因为我们没有redis。我想通过.psql我读了更多关于锁的信息,我认为我需要锁。这是正确的方法吗?ACCESS EXCLUSIVEproductidnamestart_port //11000end_port//11999last_port_used// 11023如何同时正确处理?
查看完整描述

1 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

您可以简单地执行以下操作:


UPDATE products SET last_port_used = last_port_used+1

WHERE   id=...

    AND last_port_used < end_port

RETURNING *

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


如果需要锁定该行,还可以使用“选择以进行更新”。


查看完整回答
反对 回复 2022-08-09
  • 1 回答
  • 0 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信