分布式锁

This commit is contained in:
hello 2024-11-19 08:19:02 +08:00
parent acec273283
commit 659fdf840a
2 changed files with 51 additions and 2 deletions

View File

@ -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 时间存储。

View File

@ -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