id: PM-2025-001
created_at: '2026-01-13T05:56:50.491275Z'
source_commit: bb5c8b0
severity: high
title: 限制缓存大小以防止免费层内存溢出
description: 在免费层环境中，因缓存未限制大小导致内存溢出，触发 Render 512MB 内存限制错误，影响服务稳定性。
root_cause: Geocode 和 POI 缓存未设置大小限制，导致缓存无限增长，最终耗尽内存。
triggers:
  files:
  - app/tool/*.py
  functions:
  - CafeRecommender.geocode_cache
  - CafeRecommender.poi_cache
  patterns:
  - geocode_cache
  - poi_cache
  - Field\(default_factory=dict\)
  keywords:
  - 缓存
  - cache
  - memory
  - OOM
  - 内存溢出
fix_pattern:
  approach: 为缓存添加大小限制，并在超限时采用 FIFO 策略逐出最旧条目。
  key_changes:
  - 添加 GEOCODE_CACHE_MAX 和 POI_CACHE_MAX 常量，分别限制缓存大小为 100 和 50。
  - 在 geocode_cache 和 poi_cache 写入逻辑中添加 FIFO 驱逐逻辑。
verification:
- 验证 geocode_cache 和 poi_cache 的大小是否符合限制。
- 检查 FIFO 驱逐逻辑是否正确执行。
- 在内存受限环境中运行服务，确保不会触发 OOM 错误。
- 测试缓存命中率是否符合预期，避免过多 API 调用。
related:
  files_changed:
  - app/tool/meetspot_recommender.py
tags:
- geocoding
- memory
- cache
- performance
- api
