get method

Future<Map<String, dynamic>?> get(
  1. String key
)

Retrieve a cached value by key.

Checks the memory tier first, then falls back to disk. Returns null if the key is not found or has expired.

Implementation

Future<Map<String, dynamic>?> get(String key) async {
  // --- Memory tier ---
  final memEntry = _memoryCache[key];
  if (memEntry != null) {
    if (memEntry.isExpired) {
      _memoryCache.remove(key);
      await _deleteDiskEntry(key);
      Logger.debug('Cache miss (expired in memory): $key');
      return null;
    }
    memEntry.lastAccessed = DateTime.now();
    // Move to end to maintain LRU ordering.
    _memoryCache.remove(key);
    _memoryCache[key] = memEntry;
    Logger.debug('Cache hit (memory): $key');
    return memEntry.value;
  }

  // --- Disk tier ---
  final diskEntry = await _readDiskEntry(key);
  if (diskEntry == null) {
    Logger.debug('Cache miss (not on disk): $key');
    return null;
  }
  if (diskEntry.isExpired) {
    await _deleteDiskEntry(key);
    Logger.debug('Cache miss (expired on disk): $key');
    return null;
  }

  // Promote to memory.
  _evictIfNeeded();
  _memoryCache[key] = diskEntry;
  Logger.debug('Cache hit (disk, promoted to memory): $key');
  return diskEntry.value;
}