傳統 LRU 即時更新緩存隨體量增大面臨鎖競爭、命中率低等問題。本文提出「離線提取活躍數據 + 版本驗證 + 無鎖讀取」的高效架構。
// 緩存管理器(單例模式)
internal static class ArticleCacheManager {
private static volatile bool _cacheAvailable;
private static Dictionary<int, CacheItem> _cache;
public static void LoadCache() {
var cache = ReadCacheFromDisk();
_cache = cache; // 線程安全:讀取時先取臨時引用
}
internal static Article GetArticle(int id) {
var cache = _cache; // 臨時引用
return cache.TryGetValue(id, out var item) ? item.Article : null;
}
}
// 文章項目:含版本驗證邏輯
public class ArticleItem {
public void Load() {
if (!ArticleCacheManager.CacheAvailable) { /* 直連 DB */ return; }
var cached = ArticleCacheManager.GetArticle(ArticleId);
var realVer = VersionManager.GetArticleVersion(ArticleId);
if (cached != null && cached.Version == realVer)
Article = cached; // 可能讀到舊數據,下次刷新自動修正
else
Article = DBAdapter.GetArticle(ArticleId, cached != null);
}
}