什么是分布式缓存?
在现代高并发系统中,单机缓存已经无法满足扩展需求,分布式缓存成为标配方案。.NET中通过统一接口 IDistributedCache 实现对不同缓存介质的抽象,例如 Redis、SQL Server 等。相比本地缓存,分布式缓存具备几个核心优势:
- 多实例共享数据,保证一致性
- 应用重启后数据依然存在
- 不占用应用服务器内存资源
- 更适合云原生和微服务架构
在众多实现中,Redis由于高性能和丰富功能,成为.NET分布式缓存的首选。

Redis在.NET中的接入方式
在.NET中使用Redis分布式缓存,官方推荐使用以下NuGet包:
- Microsoft.Extensions.Caching.StackExchangeRedis
该组件基于StackExchange.Redis封装,实现了对 IDistributedCache 的支持。
1. 安装依赖
dotnet add package Microsoft.Extensions.Caching.StackExchangeRedis
2. 注册Redis缓存(Program.cs)
builder.Services.AddStackExchangeRedisCache(options =>
{
options.Configuration = "localhost:6379";
options.InstanceName = "MyCache:";
});
3. 配置说明
- Configuration:Redis连接字符串
- InstanceName:缓存Key前缀(用于隔离环境)
Redis分布式缓存实战示例
1. 基础使用(依赖注入)
public class CacheService
{
private readonly IDistributedCache _cache;
public CacheService(IDistributedCache cache)
{
_cache = cache;
}
}
2. 写入缓存
public async Task SetAsync(string key, string value)
{
var options = new DistributedCacheEntryOptions
{
AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10)
};
await _cache.SetStringAsync(key, value, options);
}
3. 读取缓存
public async Task<string> GetAsync(string key)
{
return await _cache.GetStringAsync(key);
}
4. 删除缓存
public async Task RemoveAsync(string key)
{
await _cache.RemoveAsync(key);
}
5. 对象缓存(JSON序列化)
public async Task SetObjectAsync<T>(string key, T value)
{
var json = JsonSerializer.Serialize(value);
await _cache.SetStringAsync(key, json);
}
public async Task<T> GetObjectAsync<T>(string key)
{
var json = await _cache.GetStringAsync(key);
return json == null ? default : JsonSerializer.Deserialize<T>(json);
}
缓存策略设计(实战重点)
1. 常见缓存策略
- Cache Aside(旁路缓存,最常用)
- Read Through(读穿透)
- Write Through(写穿透)
- Write Behind(异步写入)
实际开发中,推荐使用 Cache Aside:
- 先查缓存
- 缓存没有再查数据库
- 再写入缓存
2. 缓存过期策略
new DistributedCacheEntryOptions
{
AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5),
SlidingExpiration = TimeSpan.FromMinutes(2)
};
说明:
- AbsoluteExpiration:绝对过期时间
- SlidingExpiration:滑动过期(访问重置)
3. 缓存穿透/击穿/雪崩解决方案
缓存穿透
- 空值缓存
- 布隆过滤器
缓存击穿
- 热点Key加锁(Mutex)
- 使用双重检查
缓存雪崩
- 过期时间随机化
- 多级缓存(本地+Redis)
生产环境优化建议
1. 连接池优化
Redis客户端建议复用连接,避免频繁创建
2. Key设计规范
建议格式:业务:模块:唯一标识
示例:user:profile:1001
3. 序列化优化
- 小数据:JSON
- 高性能:MessagePack / ProtoBuf
4. 监控与限流
- Redis慢查询监控
- 限流防止缓存击穿
进阶:Aspire与云原生集成
在.NET Aspire中,可以通过如下方式快速接入Redis:
builder.AddRedisDistributedCache("cache");
该方式支持健康检查、日志和分布式追踪,非常适合微服务架构。
总结
Redis分布式缓存是.NET高并发系统中的核心组件。通过 IDistributedCache + StackExchangeRedis,可以快速实现统一、可扩展的缓存架构。在实际项目中,真正拉开差距的不是会不会用,而是缓存策略设计、异常场景处理、性能优化能力。掌握这些,才能让你的系统从能用走向高性能稳定运行。