cleanIfOverLimit method

  1. @override
Future<void> cleanIfOverLimit()
override

清理超限缓存

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));
    }
  }
}