موفر خدمة التخزين الموقت للإخراج من ASP.NET لـ Azure Cache لـ Redis
موفر خدمة التخزين الموقت للإخراج من Redis هو آلية تخزين خارج العملية لبيانات ذاكرة التخزين المؤقت للإخراج. هذه البيانات خاصة لاستجابات HTTP الكاملة (تخزين مؤقت لمخرجات الصفحة). يقوم المزود بتوصيل نقطة تمديد مزود ذاكرة التخزين المؤقت الجديد التي تم تقديمها في ASP.NET 4.
للحصول على تطبيقات ASP.NET Core، راجع التخزين المؤقت للإخراج في ASP.NET الأساسية باستخدام Redis في .NET 8.
لاستخدام موفر خدمة التخزين الموقت لإخراج من Redis، قم أولًا بتكوين ذاكرة التخزين المؤقت الخاصة بك، ثم قم بتكوين تطبيق ASP.NET الخاص بك باستخدام حزمة NuGet من موفر خدمة التخزين الموقت للإخراج من Redis. توفر هذه المقالة إرشادات حول تكوين تطبيقك لاستخدام موفر خدمة التخزين الموقت للإخراج من Redis. للمزيد من المعلومات حول إنشاء وتكوين تخزين مؤقت من Azure لمثال Redis، انظر إنشاء ذاكرة تخزين مؤقت.
تخزين إخراج الصفحة الأساسية ASP.NET في Redis
للحصول على مواصفات كاملة للميزات، راجع التخزين المؤقت للإخراج الأساسي ASP.NET.
للحصول على نموذج تطبيق يوضح الاستخدام، راجع تطبيق ويب .NET 8 مع التخزين المؤقت لإخراج Redis وAzure OpenAI.
تخزين إخراج صفحة ASP.NET في Redis
لتكوين تطبيق العميل في Visual Studio باستخدام Azure Cache لحزمة Redis Session State NuGet، حدد NuGet Package Manager ، وحدة تحكم مدير الحزم من الأدوات قائمة.
قم بتشغيل الأمر التالي من نافذة Package Manager Console
:
Install-Package Microsoft.Web.RedisOutputCacheProvider
تحتوي حزمة NuGet لموفر ذاكرة التخزين المؤقت للإخراج Redis على تبعية على حزمة StackExchange.Redis . إذا لم تكن حزمة StackExchange.Redis موجودة في مشروعك، تثبيتها. للمزيد من المعلومات حول حزمة NuGet من موفر خدمة التخزين الموقت للإخراج من Redis، راجع صفحة NuGetالخاصة بـ RedisOutputCacheProvider .
تقوم حزمة NuGet بتنزيل وإضافة مراجع التجميع المطلوبة وإضافة القسم التالي إلى ملف web.config الخاص بك. يحتوي هذا القسم على التكوين المطلوب لتطبيق ASP.NET لديك لاستخدام موفر خدمة التخزين الموقت للإخراج من ASP.NET.
<caching>
<outputCache defaultProvider="MyRedisOutputCache">
<providers>
<add name="MyRedisOutputCache" type="Microsoft.Web.Redis.RedisOutputCacheProvider"
host=""
accessKey=""
ssl="true" />
</providers>
</outputCache>
</caching>
تكوين السمات في العمود الأول مع القيم من ذاكرة التخزين المؤقت في مدخل Microsoft Azure. أيضًا، قم بتكوين القيم الأخرى التي تريدها. للحصول على تعليمات حول الوصول إلى خصائص المخبأ الخاصة بك، راجع ضبط مخزن Azure لإعدادات Redis .
السمة | نوع | Default | الوصف |
---|---|---|---|
_مضيف* | سلسلة | "localhost" | عنوان خادم Redis IP أو اسم المضيف |
المنفذ | عدد صحيح موجب | 6379 (غير TLS/SSL) 6380 (TLS/SSL) |
منفذ خادم Redis |
مفتاح الوصول | سلسلة | "" | كلمة مرور خادم Redis عندما يتم تمكين تصريح Redis. القيمة هي سلسلة فارغة بشكل افتراضي، ما يعني أن موفر حالة جلسة العمل لا يستخدم أي كلمة مرور عند الاتصال بخادم Redis. إذا كان خادم Redis الخاص بك في شبكة يمكن الوصول إليها للجمهور مثل Azure Cache for Redis، فتأكد من تمكين تصريح Redis لتحسين الأمان، وتوفير كلمة مرور آمنة. |
ssl | boolean | false | ما إذا كان سيتم الاتصال بخادم Redis عبر TLS. هذه القيمة هي خاطئة افتراضيًا لأن Redis لا تدعم TLS افتراضيًا. إذا كنت تستخدم Azure Cache لـ Redis، والذي يدعم SSL افتراضيًا، فتأكد من تحديد هذه القيمة بشكل صحيح لتحسين الأمان. يتم تعطيل المنفذ غير TLS افتراضيًا للمخابئ الجديدة. حدد صحيح لهذا الإعداد لاستخدام المنفذ غير TLS. للمزيد من المعلومات حول تمكين المنفذ غير TLS، راجع قسم منافذ الوصول في مقالة تكوين ذاكرة التخزين المؤقت. |
databaseIdNumber | عدد صحيح موجب | 0 | لا يمكن تحديد هذه السمة إلا من خلال web.config أو إعدادات AppSettings. حدد قاعدة بيانات Redis لاستخدامها. |
connectionTimeoutInMilliseconds | عدد صحيح موجب | مقدمة من StackExchange.Redis | تستخدم لتعيين ConnectTimeout عند إنشاء StackExchange.Redis.ConnectionMultiplexer. |
عملية TimeoutInMilliseconds | عدد صحيح موجب | مقدمة من StackExchange.Redis | تستخدم لتعيين SyncTimeout عند إنشاء StackExchange.Redis.ConnectionMultiplexer. |
connectionString (سلسلة اتصال StackExchange صالحة) | سلسلة | غير متوفر | إما إشارة معلمة إلى إعدادات AppSettings أو web.config، أو إلى سلسلة اتصال StackExchange صالحة. يمكن أن توفر هذه السمة قيمًا لـ host ، port ، accessKey ، sl ، وغيرها من سمات StackExchange.Redis. لإلقاء نظرة فاحصة على connectionString ، انظر Setting connectionString في ملاحظات السمات . |
إعدادات ClassName إعدادات MethodName |
سلسلة سلسلة |
غير متوفر | لا يمكن تحديد هذه السمات إلا من خلال web.config أو إعدادات AppSettings. يمكن استخدم هذه السمات لتوفير سلسلة اتصال. يجب أن يكون _settingsClassName* اسم فئة مؤهل لتجميع يحتوي على الأسلوب المحدد بواسطة settingsMethodName. يجب أن تكون الطريقة المحددة بإعدادات MethodName عامة وثابتة وباطلة (لا تقبل أي معلمات)، مع نوع إرجاع من سلسلة . هذه الطريقة تعيد سلسلة الاتصال الفعلية. |
loggingClassName loggingMethodName |
سلسلة سلسلة |
غير متوفر | لا يمكن تحديد هذه السمات إلا من خلال web.config أو إعدادات AppSettings. استخدم هذه السمات لتنقيح تطبيقك من خلال توفير سجلات من Session State/Output Cache جنبًا إلى جنب مع حالة جلس العمل من StackExchange.Redis. loggingClassName يجب أن يكون اسم فئة مؤهل للتجميع يحتوي على الطريقة المحددة بواسطة loggingMethodName . يجب أن تكون الطريقة المحددة بواسطة loggingMethodName عامة وثابتة وباطلة (لا تقبل أي معلمات)، مع نوع إرجاع من System.IO.TextWriter . |
applicationName | سلسلة | اسم الوحدة النمطية للمعالجة الحالية أو "/" | SessionStateProvider فحسب لا يمكن تحديد هذه السمة إلا من خلال web.config أو إعدادات AppSettings. بادئة اسم التطبيق لاستخدامها في ذاكرة تخزين مؤقت من Redis. قد يستخدم العميل نفس ذاكرة التخزين المؤقت Redis لأغراض مختلفة. للتأكد من عدم اصطدام مفاتيح الجلسة، يمكن أن تكون مسبوقة باسم التطبيق. |
throwOnError | boolean | صحيح | SessionStateProvider فحسب لا يمكن تحديد هذه السمة إلا من خلال web.config أو إعدادات AppSettings. أما إذا كان يجب طرح استثناء عند حدوث خطأ. لمزيد من المعلومات حول throwOnError ، انظر ملاحظات على throwOnError في ملاحظات السمات القسم. |
retryTimeoutInMilliseconds | عدد صحيح موجب | 5000 | SessionStateProvider فحسب لا يمكن تحديد هذه السمة إلا من خلال web.config أو إعدادات AppSettings. كم من الوقت لإعادة المحاولة عندما تفشل العملية. إذا كانت هذه القيمة أقل من operationTimeoutInMilliseconds، فلا يعيد الموفر المحاولة. لمزيد من المعلومات حول retryTimeoutInMilliseconds ، انظر ملاحظات على retryInMilliseconds في ملاحظات السمات القسم. |
redisSerializerType | سلسلة | غير متوفر | يحدد اسم النوع المؤهل للتجميع للفئة التي تنفذ Microsoft.Web.Redis. Serializer والذي يحتوي على المنطق المخصص لتسلسل القيم وتصحيحها. للمزيد من المعلومات، راجع حول redisSerializerType في قسم ملاحظات السمة. |
ملاحظات السمات
تعيين connectionString
يتم استخدام قيمة connectionString كمفتاح لجلب سلسلة الاتصال الفعلية من إعدادات AppSettings، إذا كانت هذه السلسلة موجودة في إعدادات AppSettings. إذا لم يتم العثور عليها داخل AppSettings، يتم استخدام قيمة connectionString كمفتاح لجلب سلسلة الاتصال الفعلي من قسم web.config ConnectionString، إذا كان هذا المقطع موجودا. إذا لم يكن سلسلة الاتصال موجودا في AppSettings أو قسم web.config ConnectionString، يتم استخدام القيمة الحرفية ل connectionString ك سلسلة الاتصال عند إنشاء StackExchange.Redis.ConnectionMultiplexer.
توضح الأمثلة التالية كيفية استخدام connectionString .
المثال 1
<connectionStrings>
<add name="MyRedisConnectionString" connectionString="mycache.redis.cache.windows.net:6380,password=actual access key,ssl=True,abortConnect=False" />
</connectionStrings>
في web.config
، استخدم المفتاح كقيمة معلمة بدلا من القيمة الفعلية.
<sessionState mode="Custom" customProvider="MySessionStateStore">
<providers>
<add type = "Microsoft.Web.Redis.RedisSessionStateProvider"
name = "MySessionStateStore"
connectionString = "MyRedisConnectionString"/>
</providers>
</sessionState>
المثال 2
<appSettings>
<add key="MyRedisConnectionString" value="mycache.redis.cache.windows.net:6380,password=actual access key,ssl=True,abortConnect=False" />
</appSettings>
في web.config
، استخدم المفتاح كقيمة معلمة بدلا من القيمة الفعلية.
<sessionState mode="Custom" customProvider="MySessionStateStore">
<providers>
<add type = "Microsoft.Web.Redis.RedisSessionStateProvider"
name = "MySessionStateStore"
connectionString = "MyRedisConnectionString"/>
</providers>
</sessionState>
المثال 3
<sessionState mode="Custom" customProvider="MySessionStateStore">
<providers>
<add type = "Microsoft.Web.Redis.RedisSessionStateProvider"
name = "MySessionStateStore"
connectionString = "mycache.redis.cache.windows.net:6380,password=actual access key,ssl=True,abortConnect=False"/>
</providers>
</sessionState>
ملاحظات throwOnError
في الوقت الحالي، إذا حدث خطأ أثناء عملية الجلسة، فإن مزود الدولة للجلسة يرمي باستثناء. إيقاف تشغيل الاستثناء التطبيق.
تم تعديل هذا السلوك بطريقة تدعم توقعات المستخدمين الحاليين لموفر حالة جلسة العمل ASP.NET مع السماح لك أيضا بالتصرف بناء على استثناءات. لا يزال السلوك الافتراضي يلقي استثناءً عند حدوث خطأ، بما يتفق مع مقدمي خدمات الدولة الآخرين في جلسة ASP.NET. يجب أن يعمل الرمز الحالي كما كان من قبل.
إذا قمت بتعيين throwOnError إلى خطأ ، فبدلاً من throwOnError عند حدوث خطأ، فإنه يفشل بصمت. لمعرفة ما إذا كان هناك خطأ، وإذا كان الأمر كذلك، فاكتشف ما هو الاستثناء، تحقق من الخاصية الثابتة Microsoft.Web.Redis.RedisSessionStateProvider.LastException.
ملاحظات على retryTimeoutInMilliseconds
يوفر إعداد retryTimeoutInMilliseconds بعض المنطق لتبسيط الحالة، نظرًا إلى أنه يجب أن تعيد عملية الجلسة محاولة الفشل بسبب خلل في الشبكة أو شيء آخر. يتيح إعداد retryTimeoutInMilliseconds أيضًا التحكم في مهلة إعادة المحاولة أو الانسحاب تمامًا من إعادة المحاولة.
إذا قمت بتعيين retryTimeoutInMilliseconds إلى رقم، على سبيل المثال 2000، عند فشل عملية جلسة عمل، فإنه يعيد المحاولة لمدة 2000 مللي ثانية قبل معاملته كخطأ. لجعل مزود حالة جلسة العمل يطبق منطق إعادة المحاولة هذا، ما عليك سوى ضبط المهلة. ستحدث إعادة المحاولة الأولى بعد 20 مللي ثانية، وهو ما يكفي في معظم الحالات عندما يحدث خلل في الشبكة. بعد ذلك، ستعيد المحاولة كل ثانية حتى تنتهي. بعد الوقت المستقطع مباشرة، ستعيد المحاولة مرة أخرى للتأكد من أنها لن تقطع المهلة (على الأكثر) ثانية واحدة.
إذا كنت لا تعتقد أنك بحاجة إلى إعادة المحاولة أو إذا كنت تريد التعامل مع منطق إعادة المحاولة بنفسك، ضبط retryTimeoutInMilliseconds إلى 0. على سبيل المثال، قد لا ترغب في إعادة المحاكمة عند تشغيل خادم Redis على نفس الجهاز مثل تطبيقك.
حول redisSerializerType
يتم التسلسل لتخزين القيم على Redis في تنسيق ثنائي افتراضيًا، والذي يتم توفيره بواسطة فئة BinaryFormatter . استخدم redisSerializerType لتحديد اسم النوع المؤهل للتجميع للفئة التي تنفذ Microsoft.Web.Redis.ISerializer ولديها المنطق المخصص لتسلسل وتصحر القيم. على سبيل المثال، إليك فئة Json Serializer باستخدام JSON.NET:
namespace MyCompany.Redis
{
public class JsonSerializer : ISerializer
{
private static JsonSerializerSettings _settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All };
public byte[] Serialize(object data)
{
return Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(data, _settings));
}
public object Deserialize(byte[] data)
{
if (data == null)
{
return null;
}
return JsonConvert.DeserializeObject(Encoding.UTF8.GetString(data), _settings);
}
}
}
بافتراض تعريف هذه الفئة في تجميع بالاسم MyCompanyDll ، يمكنك ضبط المعلمة redisSerializerType لاستخدامها:
<sessionState mode="Custom" customProvider="MySessionStateStore">
<providers>
<add type = "Microsoft.Web.Redis.RedisSessionStateProvider"
name = "MySessionStateStore"
redisSerializerType = "MyCompany.Redis.JsonSerializer,MyCompanyDll"
... />
</providers>
</sessionState>
توجيه ذاكرة التخزين المؤقتة للإخراج
أضف توجيه OutputCache إلى كل صفحة ترغب في تخزين المخرج فيها.
<%@ OutputCache Duration="60" VaryByParam="*" %>
في المثال السابق، تبقى بيانات صفحة المخزنة في ذاكرة تخزين مؤقتة لمدة 60 ثانية، ويتم تخزين نسخة مختلفة من الصفحة لكل مجموعة معلمات. للمزيد من المعلومات حول توجيه OutputCache، انظر @ OutputCache .
بعد القيام بهذه الخطوات، يتم تكوين تطبيقك لاستخدام موفر خدمة التخزين الموقت للإخراج من Redis.
مزودو ذاكرة التخزين المؤقت للإخراج من طرف ثالث
المحتوى ذو الصلة
تحقق من مزود دولة الجلسة ASP.NET لـ Azure Cache لـ Redis .