C# 快取(Cache)功能

 快取(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 留言