我正在做一个春季启动项目,任务是:我应该在创建后锁定产品的编辑能力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方法来检查是否有时间戳列为<现在(),并将它们作为产品插入,并删除相应的进料记录。>