缓存失效图:基于依赖追踪的智能缓存驱逐系统
设计一个基于有向无环图(DAG)的缓存依赖追踪系统,当某个数据变更时,自动找到所有依赖它的缓存键并驱逐,避免手动清除或缓存雪崩。 · 难度:入门 · +10XP
缓存失效图
创建CacheGraph类,每个缓存条目记录其依赖的数据源ID。写入缓存时注册依赖关系,数据变更时通过图拓扑排序找到所有受影响的缓存键。支持批量失效和延迟驱逐。集成Django的信号机制,在模型post_save时自动触发图遍历。使用Redis的sets存储边关系。
class CacheGraph:
def add_dependency(self, cache_key, depends_on):
# 存储 cache_key -> {dep1, dep2}
redis_client.sadd(f'dep:{cache_key}', *depends_on)
for dep in depends_on:
redis_client.sadd(f'affected:{dep}', cache_key)
def invalidate(self, data_source_id):
affected = redis_client.smembers(f'affected:{data_source_id}')
for key in affected:
redis_client.delete(key)
# 递归清除子依赖
self.invalidate(key)