diff --git a/app/scheduler.py b/app/scheduler.py index 342b1950c..7306ea0cd 100644 --- a/app/scheduler.py +++ b/app/scheduler.py @@ -682,6 +682,16 @@ class Scheduler(ConfigReloadMixin, metaclass=SingletonClass): kwargs={"job_id": "scheduler_job"}, ) + # 缓存清理服务 + self._scheduler.add_job( + self.start, + "interval", + id="clear_cache", + name="缓存清理", + hours=24, + kwargs={"job_id": "clear_cache"}, + ) + # 数据表清理服务,每天凌晨执行一次 if settings.DATA_CLEANUP_ENABLE: self._scheduler.add_job( diff --git a/tests/test_scheduler_cache_expiry.py b/tests/test_scheduler_cache_expiry.py index 1fa26d763..9566a160c 100644 --- a/tests/test_scheduler_cache_expiry.py +++ b/tests/test_scheduler_cache_expiry.py @@ -45,8 +45,8 @@ def test_scheduler_initializer_starts_background_jobs(monkeypatch): scheduler.init.assert_called_once_with() -def test_meta_cache_expire_does_not_schedule_bulk_cache_clear(monkeypatch): - """单条缓存 TTL 不应再被用于注册整批缓存清理任务。""" +def test_meta_cache_expire_does_not_control_cache_clear_interval(monkeypatch): + """缓存清理任务应使用固定间隔,不受 META_CACHE_EXPIRE 控制。""" background_scheduler = _BackgroundSchedulerStub() generic_chain = Mock() for name in [ @@ -98,6 +98,11 @@ def test_meta_cache_expire_does_not_schedule_bulk_cache_clear(monkeypatch): scheduler.init() scheduled_job_ids = {job["id"] for job in background_scheduler.jobs} - assert "clear_cache" not in scheduled_job_ids + assert "clear_cache" in scheduled_job_ids assert "clear_cache" in scheduler._jobs + # 缓存清理使用固定 24 小时间隔,不受 META_CACHE_EXPIRE 控制 + clear_cache_job = next( + job for job in background_scheduler.jobs if job["id"] == "clear_cache" + ) + assert clear_cache_job["hours"] == 24 assert background_scheduler.started is True