taolib.github_app.cache#

GitHub App 安装令牌的内存缓存实现。

本模块提供进程内、异步友好的轻量级缓存,适用于单进程场景。 如需跨进程共享,可另行实现同接口的 Redis / Memcached 适配器。

Classes#

InMemoryInstallationTokenCache

基于 OrderedDict 的异步安装令牌缓存(LRU 淘汰)。

Module Contents#

class taolib.github_app.cache.InMemoryInstallationTokenCache(maxsize: int = 256)#

基于 OrderedDict 的异步安装令牌缓存(LRU 淘汰)。

本实现支持 TTL 主动过期:通过 purge_expired() 手动清理, 或通过 start_purge_task() 启动后台周期清理协程。 过期识别与提前刷新需配合 is_stale() 使用。

初始化一个空的内存缓存容器。

参数:

maxsize -- 缓存最大条目数,超出时淘汰最久未访问的条目。

async get(key: str) taolib.github_app.models.InstallationTokenResult | None#

读取缓存中给定键的令牌结果。

命中时将该键移至末尾,实现 LRU 淘汰语义: 最近被访问的 key 不会被优先淘汰。

参数:

key -- 令牌管理器构建的缓存键。

返回:

命中时返回 InstallationTokenResult,未命中时返回 None

is_stale(result: taolib.github_app.models.InstallationTokenResult, eager_refresh_seconds: int) bool#

判断令牌是否已进入“提前刷新窗口”。

以当前 UTC 时间与 expires_at - eager_refresh_seconds 比较: 当现在已到达或超过该阈值时,认为需要提前刷新。

参数:
  • result -- 缓存中的令牌结果。

  • eager_refresh_seconds -- 提前刷新窗口的秒数。

返回:

True 表示已进入提前刷新窗口,应触发刷新;否则为 False

purge_expired() int#

删除所有已过期的缓存条目。

返回:

本次清理删除的条目数量。

async set(key: str, result: taolib.github_app.models.InstallationTokenResult) None#

写入或覆盖缓存中的令牌结果。

当缓存已满且 key 为新键时,淘汰最久未访问的条目(LRU)。

参数:
  • key -- 令牌管理器构建的缓存键。

  • result -- 待缓存的令牌结果。

start_purge_task(interval_seconds: int = 300) asyncio.Task[None]#

启动后台周期清理协程。

参数:

interval_seconds -- 清理间隔秒数,默认 300 秒。

返回:

后台清理任务的 asyncio.Task 对象。

stop_purge_task() None#

取消后台清理任务。