ما هي أفضل الممارسات في القائمة والتعامل مع Redis؟

StackOverflow https://stackoverflow.com/questions/4040574

  •  27-09-2019
  •  | 
  •  

سؤال

نحن نستخدم Redis كخادم تخزين مؤقت ، وغالبًا ما يتعين عليهم التعامل مع قائمة التخزين المؤقت. عندما نقوم بتخزين كائنات بسيطة ، فإننا نحصل على GET وسيعود REDIS NULL إذا لم يكن الكائن موجودًا وسنعلم أن الكائن غير مخبوق ويجب تحميله من قاعدة البيانات.

ولكن كيف يمكننا التعامل مع القوائم بشكل أفضل - يمكن أن تكون القائمة الفارغة قيمة صالحة. هل نحتاج إلى الاتصال موجود للتحقق مما إذا كانت القائمة موجودة (ولكن إجراء مكالمات العملية 2 بدلاً من واحد) أم هل لدى شخص ما فكرة أفضل عن كيفية التعامل مع هذا السيناريو؟

/شكرًا

هل كانت مفيدة؟

المحلول

إذا كنت بحاجة تمامًا إلى القيام بذلك ، عند إنشاء القائمة ، يمكنك دفع "Sentinel" كعنصر أول لم يتم إزالته أبدًا. من أجل القيام بذلك ذريًا ، يمكنك استخدام Multi/Exec/Watch ، ولكن الساعة متوفرة فقط في Redis 2.2 وهي حاليًا معاينة (حتى لو كانت مستقرة جدًا ، يمكنك الحصول عليها من Github Master Branch).

أعتقد في حالة الاستخدام الخاصة بك ، قد ترغب أيضًا في الحصول على RPUSHX و LPUSHX ، والتي ستضغط من الناحية الذرية على قائمة فقط إذا كانت موجودة بالفعل.

لاحظ أنه نظرًا لوجود Redis 2.2 للوجود ، فإن الحصول على عنصر واحد على الأقل لقائمة ، حيث تتم إزالة القوائم التي ستصل إلى عناصر صفر تلقائيًا ، لأسباب وجيهة عديدة ؛)

نصائح أخرى

لسوء الحظ ، لا يبدو أن أوامر الاسترجاع في قائمة/تعيين مثل Lrange و Smembers يميزون بين قائمة/مجموعة فارغة وقائمة/مجموعة غير موجودة.

لذلك إذا كنت بحاجة تمامًا إلى التمييز بين الحالتين ، أعتقد أنك ستحتاج إلى القيام بذلك أولاً. جرب أنابيب الأوامر الخاصة بك للحصول على أداء أفضل. تدعم معظم مكتبات عملاء Redis أنابيب الأنابيب.

أو يمكنك إعادة النظر في استراتيجية التخزين المؤقت الخاصة بك حتى لا تحتاج إلى تمييزها.

إذا كنت تستخدم PHP ، فسأقوم بتعيين قيمة الإرجاع إلى متغير ثم تحقق مما إذا كانت صفيف. (هذه هي الطريقة التي تعمل بها باستخدام مكتبة Predis)

$res = $redis->get('Key');
if(is_array($res))
    do code here
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top