自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

不想引入Redis,你可以試試MemoryCache實現(xiàn)內(nèi)存緩存

數(shù)據(jù)庫 其他數(shù)據(jù)庫
在.NET 7.0中,System.Runtime.Caching庫進行了進一步改進和優(yōu)化,可用于實現(xiàn)不同級別的緩存管理。下面我們對其進行詳細介紹和分類。以下是System.Runtime.Caching庫按照不同的功能和用途進行分類,并附有源代碼剖析。

System.Runtime.Caching庫是.NET 4.0引入的緩存庫,用于提高應(yīng)用程序性能。它提供了一組API,用于在內(nèi)存中存儲、檢索和管理緩存對象,并包括一些高級功能,如回調(diào)和過期策略等。在.NET 7.0中,System.Runtime.Caching庫進行了進一步改進和優(yōu)化,可用于實現(xiàn)不同級別的緩存管理。下面我們對其進行詳細介紹和分類。

以下是System.Runtime.Caching庫按照不同的功能和用途進行分類,并附有源代碼剖析:

System.Runtime.Caching庫的適用場景

System.Runtime.Caching庫適用于需要在應(yīng)用程序中實現(xiàn)內(nèi)存緩存的場景。以下是一些常見的使用場景:

  • 數(shù)據(jù)庫查詢結(jié)果的緩存:在數(shù)據(jù)庫查詢時,如果查詢結(jié)果重復(fù)使用的概率較高,可以使用MemoryCache類將結(jié)果緩存到內(nèi)存中,減少對數(shù)據(jù)庫的訪問次數(shù),提高性能。
  • 頻繁讀取的配置信息:在應(yīng)用程序中,一些配置信息需要頻繁讀取,這些配置信息可以通過MemoryCache類緩存起來,提高應(yīng)用程序的響應(yīng)速度。
  • 網(wǎng)絡(luò)請求響應(yīng)的緩存:在網(wǎng)絡(luò)請求中,如果某個請求的響應(yīng)結(jié)果較為穩(wěn)定,可以使用MemoryCache類將響應(yīng)結(jié)果緩存到內(nèi)存中,提高響應(yīng)速度和吞吐量。
  • 預(yù)先加載靜態(tài)資源:在Web應(yīng)用程序中,某些靜態(tài)資源(如CSS、JS等)需要在應(yīng)用程序啟動時預(yù)先加載,這些資源可以使用MemoryCache類進行緩存,提高頁面渲染速度。
  • 業(yè)務(wù)邏輯計算結(jié)果的緩存:在某些業(yè)務(wù)邏輯中,需要頻繁進行計算,如果計算結(jié)果穩(wěn)定,可以使用MemoryCache類緩存計算結(jié)果,提高計算速度。

System.Runtime.Caching庫的優(yōu)缺點

System.Runtime.Caching是Microsoft提供的內(nèi)存緩存方案,封裝了一組用于管理緩存的API。它使用MemoryCache類來實現(xiàn)內(nèi)存緩存,可以用于單個應(yīng)用程序域或分布式系統(tǒng)中。以下是System.Runtime.Caching的優(yōu)缺點:

優(yōu)點:

  • 高性能:System.Runtime.Caching使用內(nèi)存緩存,相比于其他持久化緩存方案,具有更高的讀寫速度和更低的響應(yīng)延遲。
  • 簡單易用:System.Runtime.Caching提供了易于使用的API,可以方便地創(chuàng)建、訪問和管理內(nèi)存緩存,適用于各種.NET應(yīng)用程序。
  • 可擴展性:System.Runtime.Caching支持多種緩存項過期策略、緩存項優(yōu)先級和回收策略,可以根據(jù)特定需求進行自定義。
  • 高可靠性:System.Runtime.Caching支持緩存項壓縮、內(nèi)存監(jiān)視和回收機制等功能,可以有效提高緩存的可靠性和穩(wěn)定性。

缺點:

  • 有容量上限:System.Runtime.Caching使用內(nèi)存緩存,所以緩存的容量受到硬件資源的限制。對于大型的數(shù)據(jù)集合,需要考慮使用其他緩存方式或增加硬件資源。
  • 無法持久化:System.Runtime.Caching只是一個內(nèi)存緩存方案,不支持將緩存項持久化到磁盤或其他介質(zhì)中。如果需要實現(xiàn)持久化緩存,需要使用其他緩存方案。
  • 可能存在并發(fā)訪問問題:System.Runtime.Caching默認情況下是線程安全的,但是在高并發(fā)環(huán)境下,仍然可能存在競爭條件和死鎖等問題。需要注意并發(fā)訪問限制和異常處理。

System.Runtime.Caching庫API介紹

System.Runtime.Caching提供了一組用于管理緩存的API,主要包括以下類型:

  • MemoryCache類:實現(xiàn)了一個內(nèi)存緩存,可以用于單個應(yīng)用程序域或分布式系統(tǒng)中。MemoryCache支持多種緩存項過期策略、緩存項優(yōu)先級和回收策略,可以根據(jù)具體需求進行自定義。常用方法包括Add、Get、Set和Remove等。
  • CacheItem類:表示緩存中的一個項。CacheItem包含緩存鍵、緩存值和緩存過期策略等屬性,可以通過構(gòu)造函數(shù)創(chuàng)建緩存項,也可以通過MemoryCache類的方法管理緩存項。
  • CacheItemPolicy類:表示一個緩存項的過期策略。CacheItemPolicy包含過期時間、優(yōu)先級、回收處理和緩存移除回調(diào)等屬性,可以通過構(gòu)造函數(shù)創(chuàng)建緩存項策略,并設(shè)置給MemoryCache或CacheItem對象。
  • CacheEntryRemovedArguments類:表示緩存項移除時的參數(shù)。CacheEntryRemovedArguments包含了緩存項的鍵、值、移除原因和移除通知等屬性,可以在緩存項移除時進行處理。
  • CacheEntryUpdateArguments類:表示緩存項更新時的參數(shù)。CacheEntryUpdateArguments包含了舊的緩存項的鍵、值和更新通知等屬性,可以在緩存項更新時進行處理。
  • CacheEntryChangeMonitor類:表示一個監(jiān)視緩存項變化的對象。CacheEntryChangeMonitor支持多種變化監(jiān)視器,例如文件監(jiān)視器、鍵依賴監(jiān)視器和SqlDependency監(jiān)視器等。

MemoryCache類

MemoryCache類是System.Runtime.Caching庫中的核心類,它表示一個內(nèi)存中的緩存集合。MemoryCache類是一個線程安全的、可擴展的、基于鍵值對的緩存系統(tǒng)。MemoryCache類提供了以下一些方法:

  • Add(string key, object value, CacheItemPolicy policy):向緩存中添加一個具有指定鍵和值的緩存項,并使用指定的策略對象指定該緩存項的過期和依賴項信息。
  • Contains(string key):返回一個值,指示指定鍵是否存在于緩存中。
  • Get(string key):獲取指定鍵的緩存項。
  • Remove(string key):從緩存中移除指定鍵的緩存項。
  • GetCount():獲取當(dāng)前緩存中的項數(shù)。
  • Dispose():釋放MemoryCache對象占用的資源。

源代碼剖析:

[DefaultMember("Item")]
    public class MemoryCache : ObjectCache, IEnumerable, IDisposable
    {
        public MemoryCache(string name, NameValueCollection config = null);
        public MemoryCache(string name, NameValueCollection config, bool ignoreConfigSection);

        public override object this[string key] { get; set; }

        public static MemoryCache Default { get; }
        public long PhysicalMemoryLimit { get; }
        public override string Name { get; }
        public long CacheMemoryLimit { get; }
        public TimeSpan PollingInterval { get; }
        public override DefaultCacheCapabilities DefaultCacheCapabilities { get; }
			  // 添加緩存項
        public override bool Add(CacheItem item, CacheItemPolicy policy);
        public override object AddOrGetExisting(string key, object value, DateTimeOffset absoluteExpiration, string regionName = null);
        public override CacheItem AddOrGetExisting(CacheItem item, CacheItemPolicy policy);
        public override object AddOrGetExisting(string key, object value, CacheItemPolicy policy, string regionName = null);
        public override bool Contains(string key, string regionName = null);
        public override CacheEntryChangeMonitor CreateCacheEntryChangeMonitor(IEnumerable<string> keys, string regionName = null);
        public void Dispose();
      
       // 獲取緩存項
        public override object Get(string key, string regionName = null);
        public override CacheItem GetCacheItem(string key, string regionName = null);
        public override long GetCount(string regionName = null);
        public long GetLastSize(string regionName = null);
        public override IDictionary<string, object> GetValues(IEnumerable<string> keys, string regionName = null);
        public override object Remove(string key, string regionName = null);
      
       // 移除緩存項  
       public object Remove(string key, CacheEntryRemovedReason reason, string regionName = null);
        public override void Set(string key, object value, CacheItemPolicy policy, string regionName = null);
        public override void Set(CacheItem item, CacheItemPolicy policy);
        public override void Set(string key, object value, DateTimeOffset absoluteExpiration, string regionName = null);
        public long Trim(int percent);
      
        // 遍歷緩存
        protected override IEnumerator<KeyValuePair<string, object>> GetEnumerator();
    }

CacheItem和CacheItemPolicy類

CacheItem表示一個緩存項,包括鍵、值、過期時間等屬性。CacheItemPolicy則表示一個策略對象,用于指定緩存項的一些屬性,如過期時間、回收策略、依賴項等。

源代碼剖析:

public class CacheItem
{
  public CacheItem(string key);
  public CacheItem(string key, object value);
  public CacheItem(string key, object value, string regionName);

  public string Key { get; set; }
	public object Value { get; set; }
	public string RegionName { get; set; }
}

public class CacheItemPolicy
{
        public CacheItemPolicy();
  
        public DateTimeOffset AbsoluteExpiration { get; set; }
        public Collection<ChangeMonitor> ChangeMonitors { get; }
        public CacheItemPriority Priority { get; set; }
        public CacheEntryRemovedCallback RemovedCallback { get; set; }
        public TimeSpan SlidingExpiration { get; set; }
        public CacheEntryUpdateCallback UpdateCallback { get; set; }
  }

CacheEntryChangeMonitor類

CacheEntryChangeMonitor類提供了監(jiān)視緩存項更改的功能,以便在發(fā)生更改時執(zhí)行回調(diào)函數(shù)或其他操作。

源代碼剖析:

public abstract class CacheEntryChangeMonitor : ChangeMonitor
    {
        protected CacheEntryChangeMonitor();

        public abstract ReadOnlyCollection<string> CacheKeys { get; }
        public abstract DateTimeOffset LastModified { get; }
        public abstract string RegionName { get; }
    }

緩存對象的管理方式

過期策略

過期策略用于確定何時從緩存中刪除對象,以防止緩存過多的對象導(dǎo)致內(nèi)存泄漏或性能降低。System.Runtime.Caching庫中提供了三種基本的過期策略:絕對時間、相對時間和空閑時間??梢酝ㄟ^CacheItemPolicy類中的AbsoluteExpiration、SlidingExpiration屬性指定緩存項的過期策略。

源代碼剖析:

public class CacheItemPolicy
{
    // 設(shè)置過期時間(絕對時間)
    public DateTimeOffset? AbsoluteExpiration { get; set; }

    // 設(shè)置過期時間(相對時間)
    public TimeSpan? SlidingExpiration { get; set; }
}

依賴關(guān)系

依賴關(guān)系用于使緩存項具有基于文件、目錄、鍵或其他對象的依賴關(guān)系。當(dāng)這些依賴項更改時,緩存中的項將自動無效。在System.Runtime.Caching庫中,可以通過以下類實現(xiàn)依賴關(guān)系的管理:

  • CacheDependency類:表示一個基于文件或目錄的依賴項。
  • ChangeMonitor類:表示一個監(jiān)視緩存項的變化的類,包括CacheDependency、FileChangeMonitor、SqlChangeMonitor等。

源代碼剖析:

public class CacheDependency : IDisposable
{
    public CacheDependency(string filename);
    public CacheDependency(string[] filenames);
    public virtual string GetUniqueID();
    public virtual void NotifyDependencyChanged(object sender, EventArgs e);
}

public abstract class ChangeMonitor : IDisposable
{
    // 標(biāo)識緩存項是否已過期
    public virtual bool HasChanged { get; }
}

回調(diào)函數(shù)

回調(diào)函數(shù)用于在緩存項過期或被刪除時執(zhí)行指定的回調(diào)函數(shù)。在System.Runtime.Caching庫中,可以通過CacheItemPolicy類中的RemovedCallback屬性指定當(dāng)緩存項過期或被刪除時要執(zhí)行的回調(diào)函數(shù)。

源代碼剖析:

public class CacheItemPolicy
{
    // 設(shè)置緩存項被刪除時的回調(diào)函數(shù)
    public int RemovedCallback { get; set; }
}

高級功能

緩存統(tǒng)計信息

緩存統(tǒng)計信息提供了緩存對象的統(tǒng)計數(shù)據(jù),如當(dāng)前緩存項數(shù)目、命中率等。在System.Runtime.Caching庫中,可以通過MemoryCacheStatistics類獲取緩存統(tǒng)計信息。

源代碼剖析:

public sealed class MemoryCacheStatistics
{
    public int Count { get; }
    public long Hits { get; }
    public double HitRatio { get; }
    public long Misses { get; }
    public double MissRatio { get; }
}

高級回收策略

高級回收策略提供了自定義的回收策略,以更精細地控制緩存對象的生命周期。在System.Runtime.Caching庫中,可以通過以下類實現(xiàn)高級回收策略的管理:

  • ICachePolicyManager接口:表示一個可自定義的緩存策略管理器。
  • CacheMemoryPressureMonitor類:表示一個監(jiān)視系統(tǒng)內(nèi)存壓力的對象。
  • BackgroundMemoryMonitor類:表示一個后臺線程,用于檢測系統(tǒng)內(nèi)存壓力并根據(jù)指定的緩存策略來刪除緩存項。

源代碼剖析:

public interface ICachePolicyManager
{
    CacheItemPolicy GetItemPolicy(string key, object value);
}

public sealed class CacheMemoryPressureMonitor : IDisposable
{
    // 監(jiān)視系統(tǒng)內(nèi)存壓力,并設(shè)置相應(yīng)的緩存策略
}

public sealed class BackgroundMemoryMonitor : IDisposable
{
    public BackgroundMemoryMonitor(ICachePolicyManager policyManager);
    // 監(jiān)視系統(tǒng)內(nèi)存壓力,并根據(jù)緩存策略來刪除緩存項
}

緩存區(qū)域

緩存區(qū)域允許將緩存項分配到不同的區(qū)域,以便更好地管理和組織緩存項。在System.Runtime.Caching庫中,可以通過CacheArea類實現(xiàn)緩存區(qū)域的管理。

源代碼剖析:

public class CacheArea : IDisposable
{
    public CacheArea(string name);
    public string Name { get; }
    public void Dispose();
    public object Get(string key);
    public bool Contains(string key);
    public void Add(string key, object value, CacheItemPolicy policy);
    public void Remove(string key);
}

完整的示例代碼

以下是一個使用System.Runtime.Caching命名空間的示例代碼,展示了如何使用MemoryCache類來創(chuàng)建緩存并添加、獲取和刪除緩存項:

using System;
using System.Runtime.Caching;

namespace MemoryCacheDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 創(chuàng)建一個內(nèi)存緩存對象
            MemoryCache cache = MemoryCache.Default;

            // 添加一個緩存項
            cache.Add("key1", "value1", DateTimeOffset.UtcNow.AddMinutes(30));

            // 獲取緩存項的值
            Object value = cache.Get("key1");
            if (value != null)
            {
                Console.WriteLine("獲取緩存項:{0}", value);
            }

            // 刪除緩存項
            cache.Remove("key1");

            // 再次嘗試獲取已被刪除的緩存項
            value = cache.Get("key1");
            if (value == null)
            {
                Console.WriteLine("獲取失敗,緩存項已被刪除");
            }

            // 設(shè)置緩存項的屬性
            CacheItemPolicy policy = new CacheItemPolicy();
            policy.AbsoluteExpiration = DateTimeOffset.UtcNow.AddMinutes(30);
            cache.Set("key2", "value2", policy);

            Console.ReadKey();
        }
    }
}

在這個例子中,我們首先使用MemoryCache.Default靜態(tài)屬性來獲取默認的內(nèi)存緩存對象。然后,我們使用Add方法向緩存中添加一個項,Get方法從緩存中獲取一個項,Remove方法從緩存中刪除一個項,以及Set方法設(shè)置緩存項的屬性。注意,我們使用CacheItemPolicy類來指定緩存項的過期時間和其他選項。

以上是System.Runtime.Caching庫按照不同的功能和用途進行分類,并提供相應(yīng)的源代碼剖析。根據(jù)實際需求,可以選擇適當(dāng)?shù)腁PI和功能進行組合使用,以達到最佳的性能和效果。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2022-08-14 22:35:37

EurekaConsul

2021-06-10 14:34:02

鴻蒙HarmonyOS應(yīng)用

2019-11-12 14:40:43

CPU緩存內(nèi)存

2022-04-28 13:58:41

Redis6客戶端服務(wù)端

2019-11-24 23:51:30

表達式autoC語言

2024-08-13 08:22:04

緩存機制C#內(nèi)存緩存工具

2021-11-30 10:38:09

splitStringTokenJava

2021-01-28 11:40:34

Dubbo異步配置

2024-09-10 10:21:19

2017-04-17 10:35:40

Spring BooRedis 操作

2023-02-14 07:47:20

SpringBootEhcache

2022-02-07 20:18:29

Redis緩存裝飾

2015-02-02 10:03:50

2019-10-24 08:00:00

JSON工具前端

2021-01-07 10:15:55

開發(fā) Java開源

2019-01-30 18:24:14

Java內(nèi)存泄漏編程語言

2024-11-01 16:18:52

2023-03-10 13:33:00

緩存穿透緩存擊穿緩存雪崩

2019-10-12 14:19:05

Redis數(shù)據(jù)庫緩存

2023-09-08 09:12:57

內(nèi)存緩存圖像
點贊
收藏

51CTO技術(shù)棧公眾號