
1) 【一句话结论】
核心是采用多级缓存架构(本地热缓存+冷存储),结合时间/访问频率的冷热分离策略(LRU+Time-based),通过动态空间分配和增量更新机制,在存储空间限制下高效管理视频数据,平衡加载速度与存储效率。
2) 【原理/概念讲解】
老师口吻解释关键概念:
3) 【对比与适用场景】
| 策略类型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| LRU(基于访问时间) | 淘汰最久未访问的冷数据 | 优先保留高频访问数据 | 需求:快速访问高频数据(如视频播放列表) | 可能误判短时间不访问的热数据 |
| Time-based(基于时间窗口) | 淘汰超过时间阈值的冷数据 | 区分近期/远期数据 | 需求:区分用户近期(如7天)和远期播放的视频 | 需动态调整时间窗口 |
4) 【示例】
伪代码(缓存管理类):
class VideoCache:
def __init__(self, max_size):
self.max_size = max_size # 本地存储最大空间(MB)
self.hot_cache = LRU(max_size * 0.7) # 热数据缓存(70%空间)
self.cold_store = TimeBasedStore(max_size * 0.3) # 冷数据存储(30%空间,按时间淘汰)
self.video_map = {} # 视频ID到缓存位置的映射
def add_video(self, video_id, data, is_hot=True):
if video_id in self.video_map:
self.remove(video_id)
if is_hot:
if len(self.hot_cache) + len(data) > self.max_size * 0.7:
evicted = self.hot_cache.pop_item() # LRU淘汰最冷热数据
self.cold_store.add(evicted.id, evicted.data)
else:
if len(self.cold_store) + len(data) > self.max_size * 0.3:
evicted = self.cold_store.pop_oldest() # Time-based淘汰最旧数据
self.video_map.pop(evicted.id, None)
self.hot_cache.add(video_id, data) if is_hot else self.cold_store.add(video_id, data)
self.video_map[video_id] = {'hot': is_hot, 'data': data}
def get_video(self, video_id):
if video_id in self.hot_cache:
self.hot_cache.touch(video_id) # 更新访问时间
return self.hot_cache.get(video_id)
elif video_id in self.cold_store:
data = self.cold_store.get(video_id)
if data:
self.hot_cache.add(video_id, data) # 冷数据访问后提升为热
self.cold_store.remove(video_id)
return data
return None
5) 【面试口播版答案】
“面试官您好,设计视频缓存系统,核心是平衡加载速度和存储效率。首先,采用多级缓存架构:本地存储分为热缓存(LRU,存储高频访问视频)和冷存储(时间窗口,存储低频视频),冷热分离依据访问频率或时间窗口。存储空间限制下,热缓存用LRU淘汰最久未访问的热数据,冷存储按时间淘汰旧数据。更新策略采用增量更新,新视频版本只下载差异部分,减少流量。实现上,通过缓存管理类维护视频数据,添加时根据热冷判断分配空间,获取时优先热缓存,冷数据访问后可能提升为热数据。这样既能快速加载热门视频,又能高效管理冷数据,避免存储溢出。”
6) 【追问清单】
7) 【常见坑/雷区】