You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用dotnet sql-cache create创建PostgreSQL缓存表及相关疑问

使用dotnet sql-cache create为PostgreSQL创建缓存表的方法

首先要明确:官方的dotnet sql-cache工具是专门为SQL Server设计的,不直接支持PostgreSQL。要在PostgreSQL中创建ASP.NET Core分布式缓存所需的表,你有两种可行方案:

方案1:手动创建缓存表

ASP.NET Core的分布式缓存对表结构有固定要求,你可以直接在PostgreSQL中执行以下SQL语句创建符合要求的缓存表:

-- 创建缓存表(可根据需求修改schema和表名)
CREATE TABLE IF NOT EXISTS public.datacache (
    id VARCHAR(449) NOT NULL PRIMARY KEY,
    value BYTEA NOT NULL,
    expiresattime TIMESTAMPTZ NOT NULL,
    slidingslopeexpirationinseconds BIGINT,
    absoluteexpirationinseconds BIGINT
);

-- 创建过期时间索引,提升缓存清理和查询性能
CREATE INDEX IF NOT EXISTS idx_datacache_expires ON public.datacache (expiresattime);

创建完成后,在ASP.NET Core项目中配置PostgreSQL分布式缓存:

  1. 安装NuGet包:Npgsql.Extensions.Caching.PostgreSQL
  2. 在Program.cs中添加配置:
builder.Services.AddDistributedPostgreSqlCache(options =>
{
    options.ConnectionString = builder.Configuration.GetConnectionString("PostgresCache");
    options.SchemaName = "public";
    options.TableName = "datacache";
});

方案2:使用社区工具

部分社区开发者提供了针对PostgreSQL的类似CLI工具,但这类工具并非官方维护,使用前需验证兼容性。相对而言,手动建表的方式更稳定可靠。


为什么要将缓存数据存储到数据库?

你提到的“缓存存在RAM中”指的是本地内存缓存(比如IMemoryCache),而存储到数据库的是分布式缓存,二者应用场景完全不同:

  • 多服务器集群共享缓存:如果应用部署在多台服务器上,本地内存缓存各自独立,会出现数据不一致问题(比如一台服务器更新数据后,其他服务器缓存仍是旧数据)。数据库作为分布式缓存介质,能让所有服务器共享同一缓存源,保证数据一致性。
  • 缓存持久化:本地内存缓存会在服务器重启、应用回收时丢失,重启后需重新从数据库加载数据,导致数据库瞬间压力增大。数据库缓存可持久化存储,重启后直接读取缓存,减少数据库负载。
  • 跨应用共享缓存:在微服务或多应用架构中,不同服务/应用可共享同一数据库缓存,避免重复缓存相同数据。
  • 内存容量限制:若需缓存的数据量很大,单台服务器内存可能无法容纳,数据库可提供更大存储容量,作为内存缓存的补充或替代。

内容的提问来源于stack exchange,提问作者Kaisar Bekbolat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 20:10:09