تجريد IDistributedCache
خزّنوا البيانات مؤقتًا عبر خوادم متعددة
تجريد IDistributedCache درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 4 دروس في المجموع.
لماذا التخزين المؤقت الموزع؟
تعيش ذاكرة التخزين المؤقت داخل الذاكرة في عملية واحدة، لذلك تُفقد عند إعادة التشغيل ولا تتم مشاركتها بين الخوادم. أما ذاكرة التخزين المؤقت الموزعة فتوجد في مخزن خارجي، مثل Redis، يمكن لكل مثيل من تطبيقكم القراءة منه والكتابة إليه، مما يجعل التخزين المؤقت متسقًا عبر عملية النشر الموزعة على عدة خوادم.
واجهة IDistributedCache
تضع ASP.NET Core التخزين المؤقت الموزع خلف IDistributedCache في Microsoft.Extensions.Caching.Distributed. يعتمد كودكم على هذه الواجهة، وليس على Redis مباشرةً، ولذلك يمكنكم تبديل التنفيذات.
public interface IDistributedCache
{
byte[] Get(string key);
Task<byte[]> GetAsync(string key, CancellationToken token = default);
void Set(string key, byte[] value, DistributedCacheEntryOptions options);
void Remove(string key);
void Refresh(string key);
}تخزين البايتات
لاحظوا أن ذاكرة التخزين المؤقت تخزّن byte[]. ولتخزين السلاسل النصية أو الكائنات، عليكم إجراء تسلسل لها أولًا. وتتوفر أساليب امتداد مفيدة للتعامل مع السلاسل النصية، وهي الحالة الأكثر شيوعًا.
using Microsoft.Extensions.Caching.Distributed;
await cache.SetStringAsync("greeting", "Hello, world");
string value = await cache.GetStringAsync("greeting");حقن ذاكرة التخزين المؤقت
اطلبوا IDistributedCache من خلال الحقن عبر المُنشئ، كما تفعلون مع أي خدمة.
public class WeatherService
{
private readonly IDistributedCache _cache;
public WeatherService(IDistributedCache cache)
{
_cache = cache;
}
}القراءة من ذاكرة التخزين المؤقت
تعيد GetStringAsync القيمة null عندما يكون المفتاح مفقودًا أو منتهي الصلاحية. تعاملوا دائمًا مع حالة عدم العثور على القيمة.
string cached = await _cache.GetStringAsync("forecast:istanbul");
if (cached is null)
{
// cache miss: load from source
}الكتابة إلى ذاكرة التخزين المؤقت
تخزّن SetStringAsync قيمةً مع خيارات انتهاء صلاحية اختيارية، وسنتناولها في درس لاحق.
await _cache.SetStringAsync(
"forecast:istanbul",
"22C sunny",
new DistributedCacheEntryOptions
{
AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10)
});الإزالة والتحديث
تزيل RemoveAsync مفتاحًا من ذاكرة التخزين المؤقت، مثلًا عند تغيّر البيانات الأساسية. وتعيد RefreshAsync ضبط انتهاء الصلاحية المنزلق دون تغيير القيمة.
await _cache.RemoveAsync("forecast:istanbul");
await _cache.RefreshAsync("session:abc123");التنفيذ الموجود في الذاكرة
لأغراض التطوير أو الاختبار، سجّلوا ذاكرة التخزين المؤقت الموزع الموجودة في الذاكرة. فهي تطبّق الواجهة نفسها، ولذلك يبقى كودكم كما هو، لكن البيانات لا تُشارك فعليًا بين العمليات.
builder.Services.AddDistributedMemoryCache();كود مستقل عن موفّر الخدمة
لأنكم تعتمدون على IDistributedCache فقط، فإن التبديل من الموفّر الموجود في الذاكرة إلى Redis أو SQL Server لا يتطلب سوى تغيير سطر التسجيل، دون أي تغييرات في كود خدماتكم.
اصطلاحات تسمية المفاتيح
استخدموا مفاتيح منظّمة ذات نطاقات أسماء، مثل entity:id:field، مثل user:42:profile. تمنع الاصطلاحات الواضحة تعارضات المفاتيح وتجعل إبطال ذاكرة التخزين المؤقت قابلًا للتوقع.
string key = $"user:{userId}:profile";متى لا نستخدم التخزين المؤقت
خزّنوا مؤقتًا البيانات التي تُقرأ كثيرًا وتتغير نادرًا. قد لا تكون البيانات شديدة التغير أو الحساسة الخاصة بالمستخدم مناسبة لذلك، ويجب دائمًا موازنة مخاطر البيانات القديمة مقابل مكاسب الأداء.
اختبار سريع
اختبروا تجريد IDistributedCache.
مراجعة
يجرّد IDistributedCache ذاكرة تخزين مؤقت خارجية ومشتركة، بحيث ترى كل نسخة من التطبيق البيانات نفسها. وهو يخزّن byte[]، مع توفير GetStringAsync/SetStringAsync للسلاسل النصية، إضافةً إلى RemoveAsync وRefreshAsync. ويؤدي الاعتماد على الواجهة إلى إبقاء الكود مستقلًا عن الموفّر وقابلًا للتبديل بين AddDistributedMemoryCache وRedis بتغيير سطر واحد. استخدموا مفاتيح واضحة ذات نطاقات أسماء.
الأسئلة الشائعة
هل درس «تجريد IDistributedCache» مجاني؟
نعم — نص درس «تجريد IDistributedCache» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.
ماذا ستتعلم في «تجريد IDistributedCache»؟
خزّنوا البيانات مؤقتًا عبر خوادم متعددة تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟
لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «تجريد IDistributedCache»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟
نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تجريد IDistributedCache
- الاتصال بـ Redis
- أنماط التخزين المؤقت وانتهاؤه
- تخزين الكائنات المتسلسلة مؤقتًا