登录
首页 >  Golang >  Go问答

数据库中线程安全的增量值

来源:stackoverflow

时间:2024-04-15 12:18:34 151浏览 收藏

本篇文章向大家介绍《数据库中线程安全的增量值》,主要包括,具有一定的参考价值,需要的朋友可以参考一下。

问题内容

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

我的产品表的列指定为 last_port_used。当有人访问 api 时,我需要为服务分配端口。它需要根据其产品名称将 last_port_id 添加 1

一种可能的解决方案是使用 Redis 服务器并在那里同步该值。因为我们没有redis。我想通过 psql 实现相同的目标。

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

产品

  • id
  • name
  • start_port //11000
  • end_port //11999
  • last_port_used // 11023

如何正确处理并发?


解决方案


你可以简单地做:

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。

本篇关于《数据库中线程安全的增量值》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>