.NET Core多站点共用AddDistributedSqlServerCache表及SQL集群配置咨询
关于.NET Core 2.1服务器场迁移的缓存与SQL集群问题
背景与准备步骤
我的.NET Core 2.1网站即将迁移至服务器场以保障维护期间的持续可用,目前已确定需修改以下步骤:
services.AddDistributedSqlServerCache()(需重点关注)services.AddDataProtection().PersistKeysToDbContext()services.AddDataProtection().ProtectKeysWithCertificate()- 为所有实例设置相同的MachineKey
注:
PersistKeysToDbContext()是从dotnet源码实现中反向移植而来。
问题
核心问题
对于AddDistributedSqlServerCache(),多个网站能否共用同一张数据库表?还是每个网站需单独使用一张表?
补充说明:所有网站均受同一OIDC中心登录服务器保护(含该中心登录服务器自身)。
附加问题
若将SQL Server部署为集群以提升高可用性,我的网站本身或连接字符串是否需要修改?集群与单实例的差异对网站是否透明?
解答
分布式SQL缓存表共用问题
多个网站可以共用同一张SQL Server缓存表,但必须通过配置避免键冲突:
- 配置
AddDistributedSqlServerCache时,所有网站指定相同的SchemaName和TableName来共用表; - 为每个网站设置唯一的
InstanceName,该值会作为缓存键的前缀,确保不同网站的缓存数据相互隔离,不会出现覆盖或读取错误。
由于你的所有网站都受同一OIDC中心保护,共用缓存表能减少数据库维护成本,只要保证InstanceName唯一,就不会出现数据混乱的问题。
SQL Server集群适配问题
SQL Server集群(如Always On可用性组)对.NET Core网站来说基本透明:
- 代码层面无需修改,数据库访问逻辑和单实例环境完全一致;
- 连接字符串仅需将原来的单实例地址替换为集群的侦听器名称,这样集群节点切换时,网站会自动连接到可用节点,无需人工干预。
只要集群配置正常(侦听器工作正常、节点同步正常),网站的数据库操作不会受到集群架构的影响。
内容的提问来源于stack exchange,提问作者MilConDoin
相关产品推荐
相关产品推荐

