gpt4 book ai didi

c# - 锁定服务器场 (asp.net)

转载 作者:太空狗 更新时间:2023-10-30 00:56:05 25 4
gpt4 key购买 nike

我想知道是否有任何方法可以使用分布式服务器(如 MySQL 集群)对部署在多个服务器上的 asp.net Web 应用程序执行“锁定”。

例如,以更新账户余额为例。任何两个请求都不应同时更新同一帐户余额。例如:

成员(member)1账户余额为100。

  • 请求A访问Server 1为成员(member)1的余额加100
  • 请求B访问Server 2给成员(member)1的余额加50

因此请求A将余额从100更新为200并保存。
请求 B 更新余额为 150,并保存。

这些都是同时发生的,因此丢失了信息,因为最终结果应该是 250。

如何锁定请求 B 必须等到请求 A 完成,直到它检索余额。如果它是单个进程,则可以通过应用程序范围的锁来实现。但是,由于有多个独立的进程,这对于未锁定的服务器 1 和服务器 2 均无效

关于如何做到这一点有什么想法或最佳实践吗?

最佳答案

这就是交易的目的。

将需要原子化的操作包装在 TransactionScope 中将它们注册到显式交易中。

这并不能完全解决陈旧数据的问题,因为如果其他并发用户正在使用值更新事务完成后,您仍然有问题。

解决方案是在表中使用一个字段,该字段在行更改时更改 - 在 SQL Server 2008 中,这是 rowversion类型。

您仅在 rowversion 未更改时更新该行 - 如果已更改,您通知用户并在不进行更新的情况下恢复当前值。

关于c# - 锁定服务器场 (asp.net),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8591031/

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