البحث الرئيسي في هذه المقالة يدور حول المحتوى المرتبط بـ SPRING Dache ، على النحو التالي.
تم تعديل هذه المقالة تقريبًا بناءً على ترجمة جوجل. نظرًا لأنني لا أعرف ماهية النص الأصلي ، فقد يؤدي ذلك إلى أخطاء وعدم الدقة في الترجمة ، لكن الاتجاه العام يبدو جيدًا للغاية ، لذلك قمت بفرزه هنا ، على أمل أن يكون مفيدًا.
لطالما كان التخزين المؤقت حاجة كبيرة لكلا من تحسين أداء التطبيق وتقليل عبء العمل. علاوة على ذلك ، فإن فائدتها واضحة بشكل خاص اليوم ، والتي يمكن استخدامها للتعامل مع الآلاف من الزوار على Concurrents.D'un Architecture لتطبيقات الويب ، وإدارة ذاكرة التخزين المؤقت المتعامدة مع منطق أعمال التطبيق ، ولهذا السبب ، ينبغي أن يكون لها تأثير ضئيل على تطوير التطبيق نفسه. بدءًا من الإصدار 3.1 ، يوفر Spring واجهة برمجة تطبيقات لإدارة ذاكرة التخزين المؤقت ، على غرار إدارة المعاملات التعريفية. الواجهة المجردة للذاكرة التخزين المؤقت ، باستخدام حلول ذاكرة التخزين المؤقت المختلفة بطريقة موحدة ، لها أقل تأثير على الكود.
يستخدم Spring أساليب Java لطلب طريقة لأول مرة لمجموعة مع المعلمات ، ويخزن Spring قيمة الإرجاع في ذاكرة التخزين المؤقت. لذلك ، سيكون الطلب التالي هو استخدام القيمة من ذاكرة التخزين المؤقت مباشرة دون الحاجة إلى استدعاء طريقة مكلفة محتملة. يتم تطبيق كل شيء بشفافية دون التأثير على الطريقة التي تسمى.
في هذا المنشور ، سنرى تطبيقات مختلفين من ذاكرة التخزين المؤقت من الربيع.
دمج الربيع وذاكرة التخزين المؤقت بسيطة وشفافة. يتم شرح الطريقة التي تحتاج إلى ذاكرة التخزين المؤقت عن طريق التعليق التوضيحي القابل للتأثير
cachable (value = "datacache") getDatas public Response (param1 long ، string param2) {} Datacache هو اسم ذاكرة التخزين المؤقت المرتبطة. عندما يتم استدعاء هذه الطريقة لأول مرة ، تقوم الطريقة بتنفيذ وتخزين نتيجة التنفيذ في تعيين النتيجة مع تجزئة المفتاح السري من <المعلمة 1 والمعلمة 2> كنتيجة. عندما يتم استدعاء نفس المعلمة مرة أخرى ، لا تحتاج هذه الطريقة إلى تنفيذها مرة أخرى.
من الممكن أن يرتبط أكثر من ذاكرة التخزين المؤقت بطريقتنا
cachable ({"datacache" ، "افتراضي"}) Refonse GetDatas (Long Param1 ، String param2) {} في هذه الحالة ، يتم فحص كل ذاكرة التخزين المؤقت قبل تنفيذ الطريقة ، وإذا كانت هناك ضربة ، فسيتم إرجاع القيمة ذات الصلة.
نسبة الخوارزميات الأساسية لمدير ذاكرة التخزين المؤقت صغيرة نسبيًا. يمكن اعتبار ذاكرة التخزين المؤقت منطقة ذاكرة يتم فيها تعيين الكائنات المخزنة بواسطة مفتاح فريد. عملية البحث عن الكائنات كما يلي:
1. احسب المفتاح (استخدم طريقة التجزئة للحصول على رمز Hashcode)
2. ابحث عن الكائنات بناءً على القيمة الرئيسية
3. إذا تم العثور على الكائن ، أعد النتيجة
4. إذا كان لا يمكن العثور عليه ، فسيتم حساب المفتاح الذي يرتبط فعليًا بالكائن وسيتم تخزين الكائن في الموقع المقابل.
يستخدم Spring تجزئة بسيطة ، والتي تقوم بإنشاء مفاتيح تستند إلى معلمات الطريقة التي تم تمريرها.
لا يمكن للطريقة المستهدفة ببساطة إنشاء مفاتيح غير ضرورية بناءً على المعلمات ، ولكن يتم إنشاء بعض الحالات البسيطة فقط بناءً على المعلمات.
cachable (value = "datacache") getDatas public Response (param1 long ، string param2 ، boolean param3) {}يسمح Cachable للمطورين بتحديد الطريقة التي يتم بها توليد المفاتيح بأنفسهم. يمكنك استخدام تعبيرات Spel للقيام بذلك.
@cachable (value = "datacache" ، key = "#param2") getDatas public response (long param1 ، string param2 ، boolean param3) {} في هذه الحالة أعلاه ، فإن معلمة المفتاح المخبوق هي PARMA2 فقط
يسمح الربيع أيضًا بخصائص متداخلة
cachable (value = "datacache" ، key =#param2.name ") getDatas public Response (long param1 ، data param2 ، boolean param3) {} هذا الموقف هو المفتاح المحسوب بناءً على سمة اسم Parma2
هناك ذاكرة التخزين المؤقت التي قد لا تكون مناسبة لذاكرة التخزين المؤقت في الحالة المستخدمة ، ولكن في بعض الحالات ، يلزم ذاكرة التخزين المؤقت. عند التخزين المؤقت ، تتم معالجة ذاكرة التخزين المؤقت استنادًا إلى True أو False المحسوبة بواسطة تعبير SPEL ، وإذا كانت الحالة صحيحة ، يتم تنفيذ ذاكرة التخزين المؤقت.
@cachable (value = "datacache" ، key = "#param2" ، inction = "#param2.length <64") getDatas public Respons
في هذه الحالة ، لن يتم تنفيذ ذاكرة التخزين المؤقت إلا إذا كان طول المعلمة الثانية أقل من 64
لا يمكن لذاكرة التخزين المؤقت لـ SPRING أن تخزين ذاكرة التخزين المؤقت فحسب ، بل يمكن أيضًا مسح تخزين ذاكرة التخزين المؤقت. يتم استخدام هذه العملية لإزالة البيانات القديمة أو البيانات المخزنة مؤقتًا غير المستخدمة. يحدد التعليق التوضيحي @cacheevict طرقًا لأداء إفراز ذاكرة التخزين المؤقت ، هذه هي المسبات لحذف البيانات في ذاكرة التخزين المؤقت.
cacheeVict (value = "datacache") public void releoaddata () {}هذا الخيار ضروري للغاية ، وسيتم استخدام هذه الطريقة عندما تحتاج إلى إزالة البيانات المخزنة مؤقتًا.
لتمكين دعم ذاكرة التخزين المؤقت لمشروع الربيع ، نحتاج إلى إضافة تعليقات ذاكرة التخزين المؤقت إلى مساحة الاسم.
<beans xmlns = "http://www.springframework.org/schema/beans" xmlns: cache = "http://www.springframework.org/cache/cache" Xmlns: XSI = "http://www.w3.org/2001/xmlschema-instance" XSI: Schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/schema/spring-beans-3.2 http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd http://www.springframework.org/schema/context"> <cache:annotation-driven />
يمكن أن يؤدي الحذف إلى تعطيل ذاكرة التخزين المؤقت ، أو تمكين استخدام ذاكرة التخزين المؤقت في فئة التكوين الخاصة بنا
configuration enableCaching الفئة العامة AppConfig {} القيود الفنية
يجب أن تحتوي معلمات طريقة تمرير الكائن على طريقة Hashcode الخاصة بها من أجل حساب المفتاح السري.
ككائن تم تمريره وإعادته كمعلمة ، يجب أن يكون قابلاً للتسلسل
تنفيذ الاختيار
يوفر الربيع تطبيقين أساسيين:
عند استخدامها ، تحتاج فقط إلى إعلان كيان Cachemanger والمدير المناسب
concurrenthashmap باستخدام جافا
<bean id = "cachemanager"> <span style = "white-space: pre"> </span> <property name = "caches"> <span style = "white-space: pre"> </span> <set> <span style = "white-space: pre"> </span> <bean name = "default"/> <span style = "white-space:
يحتاج كل مدع إلى اسم ، يتم التعرف عليه من خلال التعليقات. يمكن للمرء إدارة متعددة من SimpleCachemangers عن طريق الموداء ، وهذا التنفيذ غير ضروري في الأساس.
تنفيذ ehcache
بيان Cachemanger
Bean id = "cachemanager"> <property name = "cachemanager" ref = "ehcache"/> </bean> <bean id = "ehcache"> <property name = "configlocation" value = "classpath: ehcache.xml"/> <property name =
في ملف ehcache.xml هو ملف معلمة ذاكرة التخزين المؤقت للتطبيق:
<ehcache xsi: nonamespaceschemalocation = "ehcache.xsd" updatecheck = "true" monitoring = "autodetect" dynamicConfig = "true" maxbyteslocalheap = "150m"> <diskstore path = "java.io.tmpdir"/> OverflowTodisk = "false"/> <cache name = "datacache" eternal = "false" timetoidleSeconds = "300" maxbyteslocalheap = "30m" MemoryStoreEvictionPolicy = "LRU"/> </hcache>
باستخدام ehcache ، يمكننا تحديد ذاكرة التخزين المؤقت متعددة معلمات مختلفة بطريقة بسيطة للغاية
الاسم: معرف مخبأة
MaxByteslocalheap: يحدد عدد البايتات التي يمكن أن تستخدمها ذاكرة التخزين المؤقت للجهاز الظاهري. إذا تم تعيين cachemanager maxbyteslocalheap ، فسيتم طرح الحجم المحدد للذاكرة التخزين المؤقت بواسطة Cachemanager. ذاكرة التخزين المؤقت الأخرى استراحات مشتركة. قيمة هذه الخاصية هي البيانات <number> k | ك | م | م | ز | G يقف على الكيلوويت (K | K) ، Megabytes (M | M) أو gigabytes (g | g).
الأبدية: يحدد ما إذا كان العنصر أبديًا. إذا كان هذا هو الحال ، فسيتم تجاهل المهلة ولا ينتهي المشروع أبدًا.
timetoidleseconds: هذا هو عدد الثواني ، وقد تم ترك العنصر في الاستخدام الأخير. القيمة الافتراضية
TimetOlivesEconds: هذا هو عدد الثواني التي عاشها المشروع في Cache.LA Creategence Value Value هو 0 ، وسيكون المشروع على قيد الحياة إلى الأبد.
MemoryStoreEvictionPolicy نهب السياسة: LRU - الأقل استخدامًا مؤخرًا ، مستخدم بشكل غير متكرر فيو - أول عنصر في تاريخ الإنشاء.
DiskexpiryThreadIntervalseconds: تتحكم عملية الرهن في عدد الثواني بين شوطين.
Diskpersister: يسمح لاستعادة الكائنات بين مباراتين من الأجهزة الافتراضية المخزنة على القرص.
OverflowTodisk: يحدد ما إذا كان يمكن تخزين كائن على القرص لتحقيق الحد الأقصى لعنصر التخزين.
لتلخيصها ، استخدم صيغة رياضية بسيطة: expirationTime = Math.min((creationTime + timeToLive),(mostRecentTime + timeToIdle))
ما سبق هو كل التفسير التفصيلي لرمز ذاكرة التخزين المؤقت الربيع في هذه المقالة ، وآمل أن يكون مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى الموضوعات الأخرى ذات الصلة على هذا الموقع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!