分布式锁
This commit is contained in:
parent
acec273283
commit
659fdf840a
@ -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 时间存储。
|
||||
|
49
notes/helloshop/distributed-lock.md
Normal file
49
notes/helloshop/distributed-lock.md
Normal 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
|
Loading…
Reference in New Issue
Block a user