gpt4 book ai didi

go - Gorm原子更新到增量计数器

转载 作者:行者123 更新时间:2023-12-01 20:25:00 24 4
gpt4 key购买 nike

我有一个本质上是用户可以增加的计数器。

但是,我想避免两个用户同时增加计数器的竞争状况。

有没有一种方法可以使用Gorm自动增加计数器,而不是从数据库中获取值,增加并最终更新数据库?

最佳答案

如果要使用基本的ORM功能,则可以在检索记录时将FOR UPDATE用作query option,数据库将锁定该特定连接的记录,直到该连接发出UPDATE查询以更改该记录。
SELECTUPDATE语句都必须在同一连接上发生,这意味着您需要将它们包装在事务中(否则Go可能会通过不同的连接发送第二个查询)。

请注意,此将使要对SELECT进行编码的所有其他连接成为同一记录,请等待,直到完成UPDATE为止。对于大多数应用程序来说,这不是问题,但是如果您具有很高的并发性,或者SELECT ... FOR UPDATEUPDATE之间的时间过长,那么这可能不适合您。

除了FOR UPDATE之外,FOR SHARE选项听起来也可以为您服务,锁定争用更少(但是我不太清楚地说这句话)。

注意:这假设您使用的是支持SELECT ... FOR UPDATE的RDBMS;如果不是,请更新问题以告诉我们您正在使用哪个RDBMS。

另一个选择是只是绕过ORM并执行db.Exec("UPDATE counter_table SET counter = counter + 1 WHERE id = ?", 42)(尽管请参见https://stackoverflow.com/a/29945125/1073170的一些陷阱)。

关于go - Gorm原子更新到增量计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61471082/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com