التخزين المؤقت في C# (.NET): Redis وأدوات أخرى لتسريع التطبيقات
التخزين المؤقت هو أحد أكثر الطرق فعالية لتحسين أداء وقابلية التوسع للتطبيقات في C# (.NET). في هذه المقالة، سنستعرض بالتفصيل آليات التخزين المؤقت المضمنة، والمكتبات الشائعة للعمل مع Redis، بالإضافة إلى الحلول البديلة. ستتعلم كيفية اختيار الأداة المناسبة لمهمتك وتجنب الأخطاء الشائعة.
آليات التخزين المؤقت المضمنة في .NET
توفر منصة .NET العديد من الحلول الجاهزة للتخزين المؤقت، والتي تناسب معظم السيناريوهات دون الحاجة إلى تثبيت تبعيات خارجية.
1. MemoryCache (System.Runtime.Caching)
ذاكرة تخزين مؤقت مدمجة في ذاكرة العملية. مثالية للتطبيقات أحادية الخيط أو الأحمال الصغيرة. يتم تخزين البيانات في ذاكرة الوصول العشوائي ويتم حذفها تلقائيًا عند نقص الموارد.
using System.Runtime.Caching;
public class MemoryCacheService{ private readonly MemoryCache _cache = MemoryCache.Default;
public T GetOrSet<T>(string key, Func<T> factory, int expirationMinutes = 5) { var cached = _cache.Get(key); if (cached != null) return (T)cached;
var result = factory(); var policy = new CacheItemPolicy { AbsoluteExpiration = DateTimeOffset.UtcNow.AddMinutes(expirationMinutes) }; _cache.Set(key, result, policy); return result; }}2. IDistributedCache (Microsoft.Extensions.Caching)
تجريد للتخزين المؤقت الموزع. يسمح بالتبديل بسهولة بين Redis، SQL Server، NCache وموفرين آخرين. يُوصى به للخدمات المصغرة والتطبيقات السحابية.
using Microsoft.Extensions.Caching.Distributed;using System.Text.Json;
public class DistributedCacheService{ private readonly IDistributedCache _cache;
public DistributedCacheService(IDistributedCache cache) { _cache = cache; }
public async Task<T> GetOrSetAsync<T>(string key, Func<Task<T>> factory, int expirationMinutes = 10) { var cached = await _cache.GetStringAsync(key); if (cached != null) return JsonSerializer.Deserialize<T>(cached);
var result = await factory(); var options = new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(expirationMinutes) }; await _cache.SetStringAsync(key, JsonSerializer.Serialize(result), options); return result; }}Redis: ملك التخزين المؤقت الموزع
Redis هو مخزن بيانات عالي الأداء في الذاكرة، يدعم السلاسل والقوائم والتجزئات والمجموعات وهياكل أخرى. بالنسبة لـ .NET، المكتبة الرئيسية هي StackExchange.Redis.
تثبيت وإعداد StackExchange.Redis
قم بتثبيت الحزمة عبر NuGet:
dotnet add package StackExchange.Redisمثال على الاتصال والعمليات الأساسية:
using StackExchange.Redis;
public class RedisCacheService{ private readonly ConnectionMultiplexer _redis; private readonly IDatabase _db;
public RedisCacheService(string connectionString) { _redis = ConnectionMultiplexer.Connect(connectionString); _db = _redis.GetDatabase(); }
public async Task SetAsync(string key, string value, int expirationMinutes = 5) { await _db.StringSetAsync(key, value, TimeSpan.FromMinutes(expirationMinutes)); }
public async Task<string> GetAsync(string key) { return await _db.StringGetAsync(key); }}الإمكانيات المتقدمة لـ Redis
- Pub/Sub — الإشعارات بين الخدمات
- Sorted Sets — التصنيفات ولوحات المتصدرين