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

如何将API密钥权限/配置存入内存,避免每次调用查询数据库?

API密钥权限配置的内存缓存最优设计方案

一、启动初始化加载

  • 在API启动流程中(例如Program.cs的服务初始化阶段),批量拉取数据库中所有API密钥的权限配置,加载到线程安全的内存字典中。
  • 字典结构采用ConcurrentDictionary<string, ApiPermissionConfig>,Key为API密钥,Value封装允许访问的控制器/方法列表、需忽略字段集合等信息,确保多线程场景下的安全访问。
  • 初始化失败时可降级加载本地预设的配置文件(如JSON),保证API服务能正常启动,后续再通过管理页同步最新配置。

二、内存缓存驱动的权限校验

  • 接口请求时,从请求头或参数中提取API密钥,直接从内存字典中查询对应权限配置。
  • 校验逻辑:匹配当前请求的控制器+方法是否在允许列表内;返回响应时,根据配置过滤需忽略的字段。
  • 全程无数据库交互,完全基于内存操作,性能无损耗。

三、管理端配置更新接口

  • 提供管理员专属的POST接口(如/admin/api-permissions/sync),支持单条或批量更新API权限配置。
  • 接口执行流程:
    1. 验证管理员身份(通过专属密钥或登录态)。
    2. 先将变更写入数据库,确认持久化成功。
    3. 再更新内存字典:新增/修改对应Key的配置,或删除指定Key的条目。
    4. 数据库写入失败时,直接返回错误,内存不做修改,避免数据不一致。
  • 支持批量操作,减少管理端请求次数,提升效率。

四、数据一致性保障

  • 采用先持久化、再更内存的顺序,避免内存与数据库数据不一致。
  • 每日定时执行全量同步任务:从数据库拉取最新配置覆盖内存字典,处理数据库手动修改等异常场景下的不同步问题。
  • 可给配置添加版本号,更新时校验版本,避免并发更新冲突。

五、细节优化

  • 直接使用ConcurrentDictionary的内置方法(TryAdd/TryUpdate/TryRemove)处理内存操作,无需手动加锁,兼顾线程安全与性能。
  • 内存中的ApiPermissionConfig设计为不可变类,避免业务逻辑中意外修改配置内容。

内容的提问来源于stack exchange,提问作者Joe Defill

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:33:23