موفر خدمة التخزين الموقت للإخراج من 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

للحصول على مواصفات كاملة للميزات، راجع التخزين المؤقت للإخراج الأساسي AS.NET.

للحصول على نموذج تطبيق يوضح الاستخدام، راجع تطبيق ويب .NET 8 مع التخزين المؤقت لإخراج Redis وAzure Open الذكاء الاصطناعي.

تخزين إخراج صفحة 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
Accesskey سلسلة "" كلمة مرور خادم 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. إذا لم يتم العثور عليها داخل App الإعدادات، يتم استخدام قيمة connectionString كمفتاح لجلب سلسلة الاتصال الفعلي من قسم web.config الاتصال ionString، إذا كان هذا المقطع موجودا. إذا لم يكن سلسلة الاتصال موجودا في App الإعدادات أو قسم web.config الاتصال ionString، يتم استخدام القيمة الحرفية ل connectionString ك سلسلة الاتصال عند إنشاء StackExchange.Redis.الاتصالionMultiplexer.

توضح الأمثلة التالية كيفية استخدام 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 .