cleanIfOverLimit method
清理超限缓存
Implementation
@override
Future<void> cleanIfOverLimit() async {
final stats = await getStats();
final sizeMB = stats.totalSize / (1024 * 1024);
if (sizeMB > _maxCacheSizeMB) {
// 按分数排序,删除低分缓存(LRU算法)
final entries = _cache.entries.toList()
..sort((a, b) => a.value.score.compareTo(b.value.score));
var currentSizeMB = sizeMB;
while (currentSizeMB > _maxCacheSizeMB && entries.isNotEmpty) {
final entry = entries.removeAt(0);
_cache.remove(entry.key);
currentSizeMB = currentSizeMB - (entry.value.size / (1024 * 1024));
}
}
}