当前位置: 首页 > wzjs >正文

苏州园区两学一做网站万网官网首页

苏州园区两学一做网站,万网官网首页,wordpress如何添加首页图片,苏州公司注册费用.NET 9 引入了 HybridCache,这是一个新的高性能、分布式就绪的内存缓存实现,旨在为现代 Web 应用提供更高效的数据缓存机制。它结合了本地缓存(如 IMemoryCache)和分布式缓存(如 Redis、Garnet、SQL Server&#xff09…

.NET 9 引入了 HybridCache,这是一个新的高性能、分布式就绪的内存缓存实现,旨在为现代 Web 应用提供更高效的数据缓存机制。它结合了本地缓存(如 IMemoryCache)和分布式缓存(如 Redis、Garnet、SQL Server)的优点,支持自动分级存储和异步刷新,同时具备高并发下的性能优势。

特点

  • 混合缓存架构:结合本地内存缓存与分布式缓存,减少网络往返。
  • 自动分层:热数据保留在本地,冷数据回退到分布式存储。
  • 异步刷新:避免缓存击穿,提升用户体验。
  • 可扩展性:支持自定义序列化、键生成策略和分布式缓存提供者。
  • 集成 DI:开箱即用,支持依赖注入。

🚀 使用示例

示例1:默认方式使用

1.1 安装 nuget 包(如果尚未引入)

新建 asp.net core9 webapi 项目,添加 nuget 包:

dotnet add package Microsoft.Extensions.Caching.Hybrid
  • nuget 包下载,https://www.nuget.org/packages/Microsoft.Extensions.Caching.Hybrid

Microsoft.Extensions.Caching.Hybrid

1.2 注册 HybridCache 服务

Program.cs 中注册:

var builder = WebApplication.CreateBuilder(args);// 添加 HybridCache
builder.Services.AddHybridCache();var app = builder.Build();

1.3 使用 IHybridCache 缓存数据

以下是一个简单的控制器使用示例:

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Caching.Hybrid;[ApiController]
[Route("[controller]")]
public class WeatherForecastController(IHybridCache cache) : ControllerBase
{[HttpGet]public async Task<IActionResult> Get(){var key = "weather_data";var result = await cache.GetOrCreateAsync(key, async (token) =>{// 模拟耗时操作,例如从数据库或 API 获取数据await Task.Delay(100, token);return new[] { "Sunny", "Cloudy", "Rainy" };});return Ok(result);}
}

1.4 配置 HybridCache(可选)

你可以在 appsettings.json 或代码中配置缓存行为:

builder.Services.AddHybridCache(options =>
{options.LocalCacheSizeLimit = 1024; // 设置本地缓存最大条目数options.DistributedCacheEntryOptions = new DistributedCacheEntryOptions{AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10)};
});

说明:上面的配置项,可依据实际情况自行调整。

示例2:注册 Garnet 为分布式缓存提供者

ASP.NET Core 9 中,你可以将 HybridCache 配置为使用 Garnet 作为其底层的分布式缓存提供者。Garnet 是微软开发的一个高性能、兼容 Redis 协议的键值存储系统,适用于需要高吞吐和低延迟的场景。

  • Garnet 官网,https://microsoft.github.io/garnet/

Garnet 官网

✅ 使用 HybridCache + Garnet 的步骤:

2.1 安装必要的 NuGet 包

dotnet add package Microsoft.Extensions.Caching.Hybrid
dotnet add package Garnet.Client

2.2 启动 Garnet 服务器(本地或远程)

确保你已经安装并运行了 Garnet 服务,可以通过以下方式启动:

# 假设已编译 Garnet 并进入目录
cd Garnet/bin/Release/net7.0
./garnet-server --port 6380

2.3 注册 Garnet 客户端和服务

你需要创建一个自定义的 IDistributedCache 实现来使用 Garnet,或者使用社区提供的适配器。

下面是一个简单示例,展示如何注册 Garnet 作为分布式缓存提供者:

  • a. 创建 Garnet 分布式缓存实现
using Garnet.Client;
using Microsoft.Extensions.Caching.Distributed;
using System.Text.Json;public class GarnetDistributedCache : IDistributedCache
{private readonly GarnetClient _client;public GarnetDistributedCache(GarnetClient client) => _client = client;public byte[] Get(string key) => _client.GetAsync(key).Result;public async Task<byte[]> GetAsync(string key, CancellationToken ct = default)=> await _client.GetAsync(key, ct);public void Set(string key, byte[] value, DistributedCacheEntryOptions options)=> _client.SetAsync(key, value, GetExpiryFromOptions(options)).Wait();public async Task SetAsync(string key, byte[] value, DistributedCacheEntryOptions options, CancellationToken ct = default)=> await _client.SetAsync(key, value, GetExpiryFromOptions(options), ct);public void Refresh(string key)=> _client.KeyExpireAsync(key, TimeSpan.FromMinutes(5)).Wait(); // 默认刷新为 5 分钟public async Task RefreshAsync(string key, CancellationToken ct = default){var ttl = await _client.KeyTtlAsync(key, ct); // 获取当前剩余 TTLif (ttl.HasValue && ttl.Value > TimeSpan.Zero){// 若已有 TTL,刷新为相同的持续时间await _client.KeyExpireAsync(key, ttl.Value, ct);}else{// 否则设置一个默认 TTL(可自定义)await _client.KeyExpireAsync(key, TimeSpan.FromMinutes(5), ct);}}public void Remove(string key) => _client.DeleteAsync(key).Wait();public Task RemoveAsync(string key, CancellationToken ct) => _client.DeleteAsync(key, ct);// 根据 DistributedCacheEntryOptions 获取过期时间private TimeSpan? GetExpiryFromOptions(DistributedCacheEntryOptions options){if (options.AbsoluteExpirationRelativeToNow.HasValue)return options.AbsoluteExpirationRelativeToNow.Value;else if (options.SlidingExpiration.HasValue)return options.SlidingExpiration.Value;return null;}
}
  • b. 注册 Garnet 客户端和缓存服务
var builder = WebApplication.CreateBuilder(args);// 添加 Garnet 客户端
builder.Services.AddSingleton<GarnetClient>(sp =>
{var client = new GarnetClient("localhost", 6380);client.Connect();return client;
});// 添加 Garnet 缓存实现
builder.Services.AddSingleton<IDistributedCache, GarnetDistributedCache>();// 添加 HybridCache,并使用 Garnet 作为分布式缓存后端
builder.Services.AddHybridCache(options =>
{options.LocalCacheSizeLimit = 500;options.LocalTtl = TimeSpan.FromSeconds(30);options.UseDistributedCache = true;options.DistributedTtl = TimeSpan.FromMinutes(5);options.UseSlidingExpiration = true; // 自动调用 Refresh/RefreshAsync
});

在注册 HybridCache 时启用 滑动过期策略,这样,当某个缓存项被访问时,系统会自动调用 RefreshAsync 方法来更新其在 Garnet 中的 TTL

2.4 在应用中使用 HybridCache

在控制器中使用缓存方式与之前一致。

[ApiController]
[Route("[controller]")]
public class SampleController(IHybridCache cache) : ControllerBase
{[HttpGet]public async Task<IActionResult> GetData(){var data = await cache.GetOrCreateAsync("sample-key", async (token) =>{// 模拟耗时获取数据await Task.Delay(200, token);return new[] { "Data1", "Data2" };});return Ok(data);}
}

🧠 小贴士

  • 性能优化:可以结合 HybridCacheLocalTtlDistributedTtl 控制缓存生命周期。
  • 序列化配置:可通过 AddHybridCache() 的选项自定义 ISerializer,例如使用 System.Text.Json 或 MessagePack。
  • Garnet 集群支持:如果使用集群模式,请确保客户端正确配置路由逻辑。

ASP.NET Core 9HybridCache 中,LocalTtlDistributedTtl 是两个关键配置项,用于控制缓存数据的生命周期。它们分别作用于 本地缓存层分布式缓存层,使得你可以更精细地管理缓存的有效期。

🔍 配置说明

  1. LocalTtl(本地缓存过期时间)
  • 含义:设置缓存项在本地内存中保留的最大时间。
  • 用途:确保频繁访问的数据保留在本地,提高响应速度,同时避免本地缓存长时间不更新。
  • 类型:TimeSpan
  • 示例:
services.AddHybridCache(options =>
{options.LocalTtl = TimeSpan.FromSeconds(30); // 本地缓存最多保留 30 秒
});
  1. DistributedTtl(分布式缓存过期时间)
  • 含义:设置缓存项在分布式缓存中的最大存活时间。
  • 用途:控制整个缓存系统的最终一致性,适用于跨节点共享缓存的场景。
  • 类型:TimeSpan
  • 示例:
services.AddHybridCache(options =>
{options.DistributedTtl = TimeSpan.FromMinutes(5); // 分布式缓存最多保留 5 分钟
});

🔄 即使本地缓存已过期,系统也会尝试从分布式缓存加载最新数据;若分布式缓存也过期,则重新生成并写回两级缓存。

⚙️ 典型组合策略

场景LocalTtlDistributedTtl说明
高频读取、容忍短时旧数据30s5min提高性能,减少后端压力
数据变化频繁、要求较新5s30s快速更新本地缓存,保持整体一致性
只读数据、极少变更null(永不过期)24h本地永久缓存 + 分布式定期更新

🧠 使用技巧

  • 设置 LocalTtl = null 表示本地缓存永不自动过期(仍可能被逐出以节省内存)。
  • 设置 DistributedTtl = null 表示分布式缓存项不会自动删除。
  • 如果只设置了 LocalTtl 而未设置 DistributedTtl,则分布式缓存默认与本地一致。
  • 可结合 AbsoluteExpirationRelativeToNowSlidingExpiration 等高级策略进行更复杂的控制。

通过合理配置 LocalTtlDistributedTtl,你可以灵活控制 HybridCache 的行为,实现以下目标:

  • 提升高频访问性能(利用本地缓存)
  • 减少对后端系统的冲击(利用分布式缓存)
  • 控制数据新鲜度(避免缓存脏读)

这是 HybridCache 强大灵活性的重要体现之一。

✅ 总结

HybridCache.NET 9 的一大亮点,适用于需要高性能、低延迟和分布式能力的现代应用。通过简单配置即可获得 本地 + 分布式 的双重优势,是替代传统 IMemoryCacheIDistributedCache 的理想选择。

通过将 HybridCacheGarnet 结合,你可以构建一个高性能、低延迟、支持分布式部署的缓存架构。这非常适合用于 微服务、API 网关、电商推荐 等对性能要求极高的场景。

http://www.dtcms.com/wzjs/570246.html

相关文章:

  • 徐州住房和城乡建设部网站哪个网站域名更新快
  • 专门做离异相亲的网站旅游网页
  • 建设一个网站得多少钱有做游戏广告的网站
  • 国外素材设计欣赏网站静态网站制作流程
  • 淘宝上做的网站四川建设网入川备案网站
  • 360免费视频网站建设常州建设局建筑职称网站
  • 门户网站的布局无锡手机网站建设方案
  • 在郑州网站建设wordpress 页面分页
  • 玉田县建设局网站vps怎么做多个网站
  • 制作什么网站好wordpress 获取分类子分类
  • 阿里域名官网宁波外贸seo网站建设
  • 做cps要做什么类型的网站网站策划书的基本内容
  • 网站 html建投商务
  • 电子商务网站建设项目的阶段的划分html网页模板 学生html静态网页模板
  • 福州电商网站建设进出成都最新通知
  • 哪些网站结构是不合理的中国菲律宾最新局势
  • 网站seo啥意思广西建设网怎么查询证件
  • 做流程图用什么网站好一般的网站开发语言用什么
  • flash网站开发用什么语言wordpress自动采集
  • 商务网站的建设步骤wordpress链接 结尾
  • 建设网站是什么样的网站集约化建设 技术
  • 在线搭建网站公司网站排名怎么做
  • 网站开发 工资高吗百度收录查询工具
  • 从哪个网站找钢做的微商中山 网站建设 骏域
  • 傻瓜式建站软件百度的网站名
  • 秦皇岛昌黎县建设局网站电商网站前台模块
  • 建设旅游网站缺点北京专业建设网站公司
  • 怎么提交自己的网站网页制作基础教程自学
  • 做网站和做软件哪个难多语言网站开发
  • 台州建站平台网络最好的运营商