From 659fdf840a53b2374201dafaf3580efdaad09407 Mon Sep 17 00:00:00 2001 From: hello Date: Tue, 19 Nov 2024 08:19:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E5=B8=83=E5=BC=8F=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- notes/helloshop/aspire-host.md | 4 +-- notes/helloshop/distributed-lock.md | 49 +++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 notes/helloshop/distributed-lock.md diff --git a/notes/helloshop/aspire-host.md b/notes/helloshop/aspire-host.md index 74b7e0b..254f293 100644 --- a/notes/helloshop/aspire-host.md +++ b/notes/helloshop/aspire-host.md @@ -1,4 +1,4 @@ -# 运行 Aspire 微服务程序 +# 使用 Aspire 启动分布式微服务 ## 准备数据库 @@ -72,7 +72,7 @@ var utcNow = DateTimeOffset.UtcNow; 当显示时间时,可以使用 ToLocalTime 方法转换为本地时间。 ```csharp -var localTime = now.LocalDateTime; +var localTime = utcNow.LocalDateTime; ``` PostgreSQL 数据库中的时间类型是 timestamp with time zone,它会将时间转换为 UTC 时间存储。 diff --git a/notes/helloshop/distributed-lock.md b/notes/helloshop/distributed-lock.md new file mode 100644 index 0000000..3c9f069 --- /dev/null +++ b/notes/helloshop/distributed-lock.md @@ -0,0 +1,49 @@ +# 使用分布式锁解决分布式系统中的并发问题 + +## 单进程应用程序中的锁 + +在单机环境下,我们可以使用线程锁来解决并发问题,但是在分布式系统中,线程锁无法解决并发问题,因为分布式系统中的线程锁只能锁住当前进程,无法锁住其他进程。 + +在 .NET 中,我们可以使用 `lock` 关键字来实现线程锁。 + +https://learn.microsoft.com/zh-cn/dotnet/csharp/language-reference/statements/lock + +```csharp +private static readonly object _lock = new object(); + +public void DoSomething() +{ + lock (_lock) + { + // 业务逻辑 + } +} +``` + +C# 13 引入了新的线程同步类型 System.Threading.Lock,它通过作用域管理的方式简化了锁的使用,使代码更加清晰可靠。 + +```csharp +using System.Threading.Lock; + +private static readonly Lock _lock = new Lock(); + +public void DoSomething() +{ + using (_lock.EnterScope()) + { + // 业务逻辑 + } +} +``` + +## 开源分布式锁的实现 + +DistributedLock 是一个 .NET 库,它基于各种底层技术提供强大且易于使用的分布式互斥锁、读写器锁和信号量。 + +https://github.com/madelson/DistributedLock + +## 零度框架中的分布式锁 + +零度框架中提供分布式锁的基本抽象,并基于 Dapr 实现了分布式锁。 + +https://docs.dapr.io/developing-applications/building-blocks/distributed-lock/distributed-lock-api-overview \ No newline at end of file