1 نظرة عامة
عادةً عندما نقوم بتشغيل البرنامج، سيتم إنشاء بعض البيانات الوسيطة، ويجب قراءة هذه البيانات الوسيطة في وقت ما في المستقبل. وهذا يتطلب منا تخزينه في مكان يوفر وصولاً عالي السرعة والخيار الأفضل هو في الذاكرة. لهذا ولأسباب عديدة، نحتاج إلى تخزين هذا الجزء على أجهزة أخرى، مما يخلق مشكلة في ذاكرة التخزين المؤقت الموزعة.
في الواقع، توفر ذاكرة التخزين المؤقت الموزعة بشكل أساسي ذاكرة إضافية لجهاز آخر للمساعدة في تخزين البيانات والعثور عليها.
2 طرق التنفيذ
قم أولاً بإنشاء كائن مجموعة، والذي يجب أن يكون آمنًا لمؤشر الترابط. الرمز هو كما يلي
شفرة
1 MemObject فئة ثابتة عامة
2 {
3 MemObject () ثابت
4 {
5 MemObjl = new Dictionary<string, object>();
6}
7
8 قاموس ثابت عام<string,object> Get()
9 {
10 إذا (MemObjl == فارغة)
11 MemObjl = new Dictionary<string, object>();
12 إرجاع MemObjl;
13}
14
15 إضافة فراغ ثابت عام (مفتاح سلسلة، كائن كائن)
16 {
17 Dictionary<string, object> obg = Get();
18 إذا (!obg.ContainsKey(key))
19 obg.Add(key, obj);
20}
واحد وعشرون
22 إزالة الفراغ العام الثابت (مفتاح السلسلة)
ثلاثة وعشرين {
24 احصل().إزالة(مفتاح);
25}
26
27 عدد صحيح ثابت عام ()
28 {
29 return Get().Count;
30}
31
32 الحصول على كائن ثابت عام (مفتاح السلسلة)
33 {
34 قاموس<string, object> obg = Get();
35 إذا (obg.ContainsKey(مفتاح))
36 إرجاع obg[مفتاح];
37 إرجاع فارغ؛
38 }
39
40 مخارج منطقية عامة ثابتة (مفتاح سلسلة)
41 {
42 return Get().ContainsKey(key);
43}
44
45 قاموس ثابت خاص<string,object> MemObjl;
46 }
ثم نختتمها ونسميها عن بعد، ويكون الكود كما يلي
شفرة
فئة عامة واحدة DataCatcher: MarshalByRefObject, ICarrier.ICarrier
2 {
3 مجموعة باطلة عامة (مفتاح السلسلة، قيمة الكائن)
4 {
5 //إذا (خروج (مفتاح))
6 // إزالة(مفتاح);
7 //MemObjl.Add(key, value);
8 MemObject.Add(key, value);
9}
10
11 مخارج منطقية عامة (مفتاح السلسلة)
12 {
13 return MemObject.Exits(key);
14}
15
16 إزالة الفراغ العام (مفتاح السلسلة)
17 {
18 MemObject.Remove(key);
19}
20
21 عدد صحيح عام ()
إثنان وعشرون {
23 return MemObject.Count();
أربعة وعشرون }
25
26 الحصول على الكائن العام (مفتاح السلسلة)
27 {
28 return MemObject.Get(key);
29 }
30}
من أجل تجنب تسرب منطق أعمالنا، فإننا نقدم واجهة للعميل للاتصال
شفرة
1 واجهة عامة ICarrier
2 {
3
4 إزالة باطلة (مفتاح السلسلة) ؛
5
6 مخارج منطقية (مفتاح السلسلة)؛
7
8 مجموعة باطلة (مفتاح السلسلة، قيمة الكائن)؛
9
10 كائن الحصول على (مفتاح السلسلة)؛
11
12 عدد صحيح ()؛
13}
على ما يرام. بهذه الطريقة، يتم إكمال التعليمات البرمجية من جانب الخادم لدينا.
بعد ذلك ننشر الخدمة للعملاء للاتصال بها
شفرة
1 فئة عامة جزئية SharpCatchedService: ServiceBase
2 {
3 SharpCatchedService () العامة
4 {
5 تهيئة المكون();
6}
7
8 تجاوز محمي باطل OnStart(string[] args)
9 {
10 قناة TcpChannel = new TcpChannel(ConfigHelper.Port);
11 ChannelServices.RegisterChannel(channel, false);
12 RemotingConfiguration.RegisterWellKnownServiceType(typeof(DataCatcher),
13 "SharpCatched"، WellKnownObjectMode.Singleton)؛
14}
15
16 تجاوز محمي باطل OnStop ()
17 {
18}
19}
وبهذه الطريقة، يمكن للعميل الوصول إلى البيانات البعيدة من خلال هذه الواجهة.
من جانب العميل، أولاً نحصل على الكائن البعيد
شفرة
ICarrier Carrier () ثابت عام
{
ICarrierrier = (ICarrier)Activator.GetObject(typeof(ICarrier), "tcp://localhost:" + ConfigHelper.Port + "/SharpCatched");
ناقل العودة؛
}
ثم نقوم بتغليفها
شفرة
1 فئة عامة SharpCatchedAPI
2 {
3 آي كاريير آي كاريير؛
4
5 الفراغ العام Init ()
6 {
7 icarrier = DoConnect.Carrier();
8}
9
10 مجموعة باطلة عامة (مفتاح السلسلة، قيمة الكائن)
11 {
12icarrier.Set(key, value);
13}
14
15 إزالة الفراغ العام (مفتاح السلسلة)
16 {
17 icarrier.Remove(key);
18}
19
20 كائن عام احصل على (مفتاح السلسلة)
واحد وعشرون {
22 إرجاع icarrier.Get(key);
ثلاثة وعشرين }
أربعة وعشرون
25 مخارج منطقية عامة (مفتاح السلسلة)
26 {
27 عودة icarrier.Exits(key);
28 }
29 }
3 متابعة
التنفيذ أعلاه هو الحل الأساسي لذاكرة التخزين المؤقت الموزعة. في الواقع، يمكننا تحويل هذه المجموعة إلى كائنات مجموعة أخرى، مثل HashTable. يتم بدء تشغيل مؤشر الترابط الخفي عند بدء تشغيل الكائن، وتتمثل مهمة هذه العملية في إلحاق كائن ذاكرة التخزين المؤقت منتهية الصلاحية بكائن مجموعة، ثم اجتياز الكائن لتدمير كائن ذاكرة التخزين المؤقت. يمكننا أيضًا تجزئة الكائن مرة واحدة وتخزينه على خوادم تخزين مؤقت متعددة.