التخزين المؤقت في C# (.NET): Redis وMemoryCache وحلول أخرى

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

التخزين المؤقت في C# (.NET): Redis وMemoryCache والبدائل

التخزين المؤقت هو أحد الأدوات الرئيسية لتحسين أداء التطبيقات في C# (.NET). فهو يسمح بتقليل وقت الاستجابة، وتخفيف الحمل على قواعد البيانات، وتقليل تكاليف البنية التحتية. في هذه المقالة، سنستعرض الآليات المدمجة في .NET، والتطبيقات الشائعة القائمة على Redis، بالإضافة إلى الحلول البديلة مثل NCache وCouchbase.



1. التخزين المؤقت المدمج: MemoryCache

MemoryCache (مساحة الأسماء Microsoft.Extensions.Caching.Memory) هو مخبأ بسيط وسريع يخزن البيانات في الذاكرة العشوائية لعملية واحدة. وهو مثالي للتطبيقات أحادية الخيط أو خوادم الويب ذات المثيل الواحد.



التثبيت والربط

dotnet add package Microsoft.Extensions.Caching.Memory


مثال على الاستخدام الأساسي

using Microsoft.Extensions.Caching.Memory;

public class DataService{ private readonly IMemoryCache _cache; private readonly TimeSpan _cacheDuration = TimeSpan.FromMinutes(5);

public DataService(IMemoryCache cache) => _cache = cache;

public async Task<string> GetDataAsync(string key) { if (!_cache.TryGetValue(key, out string cachedData)) { cachedData = await FetchFromDatabaseAsync(key); _cache.Set(key, cachedData, new MemoryCacheEntryOptions { AbsoluteExpirationRelativeToNow = _cacheDuration }); } return cachedData; }}


المزايا والعيوب

  • + البساطة، عدم وجود تأخير في الشبكة.
  • + دعم مدمج لانتهاء الصلاحية (مطلق/منزلق).
  • - لا يعمل عند التوسع عبر عدة خوادم.
  • - عند إعادة تشغيل التطبيق، يتم مسح المخبأ.


2. التخزين المؤقت الموزع: Redis

Redis هو الخيار الأكثر شيوعًا للتخزين المؤقت الموزع في نظام .NET البيئي. يعمل كخدمة منفصلة متاحة لجميع مثيلات التطبيق. في .NET، يتم استخدام التجريد IDistributedCache.



تثبيت الحزمة

dotnet add package Microsoft.Extensions.Caching.StackExchangeRedis


الإعداد في Program.cs

builder.Services.AddStackExchangeRedisCache(options =>{    options.Configuration = "localhost:6379";    options.InstanceName = "MyAppCache";});


مثال على العمل مع IDistributedCache

public class RedisCacheService{    private readonly IDistributedCache _cache;

public RedisCacheService(IDistributedCache cache) => _cache = cache;

public async Task SetAsync(string key, byte[] data, int minutes = 10) { await _cache.SetAsync(key, data, new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(minutes) }); }

public async Task<byte[]> GetAsync(string key) { return await _cache.GetAsync(key); }}


الإمكانيات المتقدمة لـ Redis

  • تسلسل الكائنات: استخدم System.Text.Json أو Newtonsoft.Json.
  • الإبطال بالعلامات: المكتبات الخارجية (مثل EasyCaching.Redis) تسمح بتجميع السجلات.
  • Pub/Sub: للإشعارات بتغييرات المخبأ.


3. بدائل Redis



3.1 NCache

NCache هو حل تجاري (يوجد إصدار مجاني) مع دعم .NET. يوفر إمكانيات متقدمة: المزامنة بين العقد، استعلامات شبيهة بـ SQL للمخبأ، تخزين جلسات ASP.NET.

  • + دعم مدمج لـ IDist

توصيات