使用缓存避免重复查询,C#常用MemoryCache和Redis;单机用MemoryCache,集群用Redis,结合LazyCache等库简化操作,建议合理设计键名、过期时间和更新策略。

在C#中实现数据库查询的缓存,核心思路是避免重复执行相同查询,将结果暂存内存或分布式存储中。常见做法是结合缓存库与业务逻辑控制缓存的读取、写入和过期。
1. MemoryCache(内置内存缓存)
.NET Framework 和 .NET Core 都提供了 MemoryCache 类,适合单机部署场景。
var cache = new MemoryCache(new MemoryCacheOptions()); var cacheKey = "users_list";
if (!cache.TryGetValue(cacheKey, out List
// 写入缓存,设置过期时间
var cacheEntryOptions = new MemoryCacheEntryOptions()
    .SetAbsoluteExpiration(TimeSpan.FromMinutes(10));
cache.Set(cacheKey, users, cacheEntryOptions);}
<p><strong>2. Redis(分布式缓存)</strong><br>
适用于多实例部署、需要共享缓存的场景。常用库是 <strong>StackExchange.Redis</strong>。</p>
<font color="#000000">安装 NuGet 包:</font>
<pre>Install-Package StackExchange.Redis</pre>
<font color="#000000">使用示例:</font>
```csharp
using StackExchange.Redis;
var redis = ConnectionMultiplexer.Connect("localhost:6379");
var db = redis.GetDatabase();
var cacheKey = "users_list";
var cachedData = db.StringGet(cacheKey);
if (cachedData.IsNullOrEmpty)
{
    var users = dbContext.Users.ToList();
    var json = JsonSerializer.Serialize(users);
    db.StringSet(cacheKey, json, TimeSpan.FromMinutes(10));
}
else
{
    var users = JsonSerializer.Deserialize<List<User>>(cachedData);
}3. 使用第三方封装库简化操作
- Microsoft.Extensions.Caching.StackExchangeRedis:官方封装,提供统一接口。
- LazyCache:简化 MemoryCache 的使用,支持异步缓存获取。
- CacheManager:功能更全面,支持多层缓存(如内存 + Redis)。
以 LazyCache 为例:
using LazyCache;
var cache = new CachingService();
var users = cache.GetOrAdd("users_list", 
    () => dbContext.Users.ToList(), 
    TimeSpan.FromMinutes(10));entity:query:condition
基本上就这些。根据项目规模选择合适方案:小项目用 MemoryCache,大项目或集群用 Redis。
以上就是C#中如何实现数据库查询的缓存?使用什么库?的详细内容,更多请关注php中文网其它相关文章!
 
                        
                        每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
 
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号