gpt4 book ai didi

asp.net - 如何在 asp.net 应用程序中实现 "pessimistic locking"?

转载 作者:行者123 更新时间:2023-12-04 14:21:28 25 4
gpt4 key购买 nike

我想从在 asp.net 应用程序中实现类似“悲观锁定”之类的东西的任何人那里得到一些建议。这是我正在寻找的行为:

  • 用户 A 打开订单 #313
  • 用户 B 尝试打开订单 #313,但被告知用户 A 已专门打开订单 X 分钟。

  • 由于我之前没有实现过这个功能,所以我有几个设计问题:
  • 我应该将哪些数据附加到订单记录中?我在考虑:
  • LockOwnedBy
  • 锁定获取时间
  • LockRefreshedTime

  • 如果 LockRefreshedTime <(现在 - 10 分钟),我会考虑解锁记录。
  • 我如何保证锁的持有时间不会超过必要的时间,但也不会意外过期?

  • 我对 jQuery 非常熟悉,因此欢迎使用客户端脚本的方法。这将是一个内部 Web 应用程序,因此我可以相当自由地使用带宽/周期。我还想知道“悲观锁定”是否是这个概念的合适术语。

    最佳答案

    听起来你已经到了那里。我不认为你真的需要 LockRefreshedTime ,它并没有真正添加任何东西。您也可以使用 LockAcquiredTime 来确定锁何时过时。

    您要做的另一件事是确保使用事务。您需要将锁的检查和设置包装在一个数据库事务中,这样最终不会有两个用户认为他们拥有有效的锁。

    如果您的任务需要获得对多个资源的锁(即多个给定类型的记录或多个类型的记录),那么无论您在何处进行锁定,都需要以相同的顺序应用锁。否则,您可能会遇到死锁,其中一位代码已锁定记录 A 并想要锁定记录 B,而另一位代码已锁定 B 并正在等待记录 A。

    至于如何确保锁不会意外释放。确保如果您有任何长时间运行的进程可能运行时间超过您的锁超时,它会在运行期间刷新其锁。

    术语“显式锁定”也用于描述这次锁定。

    关于asp.net - 如何在 asp.net 应用程序中实现 "pessimistic locking"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/617934/

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