锁定编辑数据库中特定记录的最佳方法



我正在做一个春季启动项目,任务是:我应该在创建后锁定产品的编辑能力15分钟,所以基本上如果用户创建一个产品,这个产品将被锁定编辑15分钟,之后它可以从DB中更改或删除。我的问题是:实现这一目标的最佳方法是什么?

1-我是否应该在DB表中添加一个名为lastUpdate的字段,然后检查15分钟的时间是否超过。

2-我是否应该将所有新创建的产品保存在数组中并每15分钟清除该数组?

或者在性能和最佳实践方面有更好的方法吗?

我正在使用带有JPA的springboot &mysql .

谢谢。

你应该使用InnoDB中可用的锁

相反,您应该在某个表中使用某个列来控制锁。它可能应该是一个TIMESTAMP,这样您就可以确定15分钟是否已经用完。

如果"过期"one_answers"删除"是由某些db操作触发的(尝试使用项目等),请将其检查为该db操作的一部分。过期检查(和删除)应该是包含该操作的事务的一部分;这个使用InnoDB锁,但只是短暂的。

如果没有这样的操作,那么使用MySQLEVENT或OS的"cron job";每隔几分钟就跑一圈,清除超过15分钟的东西。(清除会有轻微的延迟,但这应该无关紧要。

如果您提供在项的生命周期内可能发生的SQL语句,我可能能够更具体。

你可以在你的更新方法和删除方法中做一些检查。如果有很多方法,你可以使用AOP。

您可以使用上述两种功能。

首先,在表中有一个lastUpdated字段是很好的,这将有助于你将来实现其他功能。

然后你可以有一个内部缓存(映射有时间和对象引用),存储对象并限制对它们的编辑。您可以运行调度程序来检查每分钟,并从您的映射中清除对象,并使它们可用于更新。

你可以把你的新产品放到" incoming_products">

将时间戳列设置为date_add(now(), INTERVAL 15 MINUTE)。然后在我们的Boot应用程序中每分钟运行一个@Scheduled方法来检查是否有时间戳列为<现在(),并将它们作为产品插入,并删除相应的进料记录。>

相关内容

  • 没有找到相关文章