快取(Cache)功能
using System;
using System.Runtime.Caching;
public class CacheHelper : IDisposable
{
private readonly MemoryCache _cache;
/// <summary>
/// CacheHelper 建構函式。初始化 MemoryCache 實例。
/// </summary>
public CacheHelper()
{
_cache = MemoryCache.Default;
}
/// <summary>
/// 將資料加入快取。
/// </summary>
/// <param name="key">快取鍵。</param>
/// <param name="value">要快取的值。</param>
/// <param name="expiration">選擇性的過期時間。預設為 1 分鐘。</param>
public void Add(string key, object value, DateTimeOffset? expiration = null)
{
// 如果快取中已經存在相同鍵,則直接返回,避免重複加入。
if (_cache.Contains(key)) return;
// 如果提供了過期時間,使用提供的過期時間;否則,預設為 1 分鐘後過期。
var cacheItemPolicy = new CacheItemPolicy();
cacheItemPolicy.AbsoluteExpiration = expiration ?? DateTimeOffset.Now.AddMinutes(1);
// 將值加入快取。
_cache.Add(key, value, cacheItemPolicy);
}
/// <summary>
/// 從快取中獲取資料。
/// </summary>
/// <typeparam name="T">要獲取的資料類型。</typeparam>
/// <param name="key">快取鍵。</param>
/// <param name="defaultValue">選擇性的預設值。如果鍵不存在,將返回此值。</param>
/// <returns>從快取中獲取的資料,或是預設值(如果鍵不存在)。</returns>
public T Get<T>(string key, T defaultValue = default(T))
{
// 如果快取中存在指定鍵,則返回對應的值;否則,返回預設值。
if (_cache.Contains(key))
return (T)_cache.Get(key);
return defaultValue;
}
/// <summary>
/// 從快取中移除資料。
/// </summary>
/// <param name="key">要移除的快取鍵。</param>
public void Remove(string key)
{
_cache.Remove(key);
}
/// <summary>
/// 釋放 CacheHelper 使用的資源。
/// </summary>
public void Dispose()
{
_cache.Dispose();
}
}
0 留言