get method
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;
}