كيفية إدارة قواعد بيانات Redis والمفاتيح

المقدمة

ريديس هو نظام تخزين بيانات ذاكري مفتوح المصدر، يستخدم نموذج مفتاح-قيمة. قاعدة بيانات مفتاح-قيمة هي نوع من قواعد البيانات غير القائمة على الهياكل، حيث تعتبر المفاتيح هي معرفات فريدة لقيمها المرتبطة بها. يتضمن أي نسخة من ريديس عدة قواعد بيانات، يمكن لكل منها أن تحتوي على العديد من المفاتيح المختلفة لأنواع مختلفة من البيانات.

في هذا الدليل، ستتعلم كيفية اختيار قاعدة بيانات، نقل المفاتيح بين القواعد، وإدارة وحذف المفاتيح.

كيفية استخدام هذا الدليل

تمت كتابة هذا الدليل كورقة مراقبة مع أمثلة مستقلة. نشجعك على الانتقال إلى أي قسم يتعلق بالمهمة التي تحاول إكمالها.

الأوامر المعروضة في هذا الدليل تم اختبارها على خادم Ubuntu 22.04 يعمل بإصدار Redis 6.0.16. لإعداد بيئة مماثلة، يمكنك اتباع الخطوة 1 من دليلنا حول كيفية تثبيت وتأمين Redis على Ubuntu 22.04. سنقوم بعرض كيفية سلوك هذه الأوامر عن طريق تشغيلها باستخدام redis-cli، واجهة سطر الأوامر لـ Redis. يرجى ملاحظة أنه إذا كنت تستخدم واجهة Redis مختلفة — Redli، على سبيل المثال — فقد تختلف النتائج الدقيقة لبعض الأوامر.

بديلاً، يمكنك توفير نسخة مديرة لقاعدة بيانات Redis لاختبار هذه الأوامر، ولكن اعتمادًا على مستوى التحكم المسموح به من قِبل مزود قاعدة البيانات الخاص بك، قد لا تعمل بعض الأوامر في هذا الدليل كما هو موضح. لتوفير قاعدة بيانات مُدارة من DigitalOcean، اتبع توثيق منتج قواعد البيانات المُدارة. ثم، يجب عليك إما تثبيت Redli أو إعداد نفق TLS للاتصال بقاعدة البيانات المُدارة عبر TLS.

إدارة قواعد البيانات

**باستخدام Redis كنظام افتراضي، يدعم الإصدار أفتراضيًا 16 قاعدة بيانات منطقية. يتم عزل هذه القواعد عن بعضها البعض بشكل فعّال، وعند تنفيذ أمر في قاعدة بيانات واحدة، فإنه لا يؤثر على أي من البيانات المخزنة في قواعد بيانات أخرى في مثيل Redis الخاص بك.

تتراقب قواعد بيانات Redis بأرقام من 0 إلى 15، وعند الاتصال بمثيل Redis الخاص بك، يكون الاتصال افتراضيًا بقاعدة البيانات 0. ومع ذلك، يمكنك تغيير قاعدة البيانات التي تستخدمها باستخدام أمر select بعد الاتصال:

  1. select 15

إذا قمت باختيار قاعدة بيانات أخرى غير 0، سيتم عكس ذلك في موجه أوامر redis-cli:

لتبديل كل البيانات الموجودة في إحدى قواعد البيانات بالبيانات الموجودة في قاعدة بيانات أخرى، استخدم أمر swapdb. سيؤدي المثال التالي إلى تبديل البيانات الموجودة في قاعدة البيانات 6 مع البيانات في قاعدة البيانات 8، وسيكون بإمكان أي عميل متصل بأي من القواعد تنفيذ التغييرات فورا:

  1. swapdb 6 8

سيعيد swapdb OK إذا كان التبديل ناجحًا.

إذا كنت ترغب في نقل مفتاح إلى مثيل Redis آخر، يمكنك تشغيل migrate. يضمن هذا الأمر أن يكون المفتاح موجودًا في مثيل الوجهة قبل حذفه من مثيل المصدر. عند تشغيل migrate، يجب أن يتضمن الأمر العناصر التالية بترتيبها:

  • اسم المضيف أو عنوان IP لقاعدة البيانات الوجهة
  • رقم المنفذ لقاعدة البيانات الهدف
  • اسم المفتاح الذي تريد نقله
  • رقم قاعدة البيانات حيث تريد تخزين المفتاح في مثيل الوجهة
  • A timeout, in milliseconds, which defines the maximum amount of idle communication time between the two machines. Note that this isn’t a time limit for the operation, but means that the operation should always make some level of progress within the defined length of time

لتوضيح، هذا مثال:

  1. migrate 203.0.113.0 6379 key_1 7 8000

بالإضافة إلى ذلك، migrate يسمح بالخيارات التالية التي يمكنك إضافتها بعد وسيط الزمن:

  • COPY: يحدد أن المفتاح لا ينبغي حذفه من مصدر النسخة
  • REPLACE: يحدد أنه في حال كان المفتاح موجودًا بالفعل في الوجهة، يجب على عملية migrate حذفه واستبداله
  • KEYS: بدلاً من تقديم مفتاح محدد للتهجير، يمكنك إدخال سلسلة فارغة ("") ثم استخدام بنية الأمر من الأوامر للمفاتيح لتهجير أي مفتاح يتطابق مع نمط معين. لمزيد من المعلومات حول كيفية عمل الأمر keys، اقرأ دورتنا التعليمية حول كيفية تشخيص المشاكل في ريديس.

إدارة المفاتيح

هناك عدد من أوامر ريديس المفيدة لإدارة المفاتيح بغض النظر عن نوع البيانات التي تحتويها. يتم استعراض بعض هذه الأوامر في القسم التالي.

rename سيعيد تسمية المفتاح المحدد. إذا نجحت، ستعيد OK:

  1. rename old_key new_key

يمكنك استخدام randomkey لإعادة مفتاح عشوائي من قاعدة البيانات المحددة حاليًا:

  1. randomkey
Output
"any_key"

استخدم type لتحديد نوع البيانات التي تحتويها المفتاح المعطى. يمكن أن يكون إخراج هذا الأمر إما string، list، hash، set، zset، أو stream:

  1. type key_1
Output
"string"

إذا كان المفتاح المحدد غير موجود، سيعيد type none بدلاً من ذلك.

يمكنك نقل مفتاح فردي إلى قاعدة بيانات أخرى في مثيل Redis الخاص بك باستخدام أمر move. يأخذ move اسم المفتاح وقاعدة البيانات التي تريد نقل المفتاح إليها كوسيطين. على سبيل المثال، لنقل المفتاح key_1 إلى قاعدة البيانات 8، يمكنك تشغيل الأمر التالي:

  1. move key_1 8

سيعيد move OK إذا كان نقل المفتاح ناجحاً.

حذف المفاتيح

لحذف مفتاح أو أكثر من المفاتيح من أي نوع من البيانات، استخدم أمر del تلاه واحد أو أكثر من المفاتيح التي تريد حذفها:

  1. del key_1 key_2

إذا نجح هذا الأمر في حذف المفتاح(أو المفاتيح) بنجاح، سيعيد del (integer) 1. وإلا، سيعيد (integer) 0.

يقوم أمر unlink بأداء وظيفة مشابهة لأمر del، باستثناء أن del يحجب العميل أثناء استعادة الخادم للذاكرة المستخدمة من قبل المفتاح. إذا كان المفتاح الذي يتم حذفه مرتبطًا بكائن صغير، فإن كمية الوقت اللازمة لـ del لاستعادة الذاكرة صغيرة جدًا وقت الحجب قد لا يكون ملحوظًا حتى.

ومع ذلك، يمكن أن يصبح الأمر غير مريح إذا كان المفتاح الذي تقوم بحذفه مرتبطًا بكثير من الكائنات، مثل الهاش مع الآلاف أو الملايين من الحقول. يمكن أن يستغرق حذف مثل هذا المفتاح وقتًا طويلاً بشكل ملحوظ، وستتم منعك من أداء أي عمليات أخرى حتى يتمتع الحذف بالكامل من ذاكرة الخادم.

unlink، ومع ذلك، يحدد أولاً تكلفة إلغاء تخصيص الذاكرة التي تستهلكها المفتاح. إذا كانت الكلفة صغيرة، فإن unlink يعمل بنفس الطريقة كما del عند المفتاح على الفور مع حظر العميل. ومع ذلك، إذا كانت هناك تكلفة عالية لإلغاء تخصيص الذاكرة للمفتاح، فإن unlink سيقوم بحذف المفتاح بشكل غير متزامن عن طريق إنشاء خيط آخر واستعادة الذاكرة تدريجيًا في الخلفية دون حجب العميل:

  1. unlink key_1

نظرًا لأنه يعمل في الخلفية، يُنصح عمومًا باستخدام unlink لإزالة المفاتيح من الخادم الخاص بك لتقليل الأخطاء في عملائك، على الرغم من أن del سيكون كافيًا أيضًا في كثير من الحالات.

تحذير: تُعتبر الأوامر الاثنتان التاليتان خطرة. ستقوم أوامر flushdb و flushall بحذف جميع المفاتيح في قاعدة بيانات واحدة وجميع المفاتيح في كل قاعدة بيانات على خادم Redis على التوالي، على التوالي. يُوصى بتشغيل هذه الأوامر فقط إذا كنت متأكدًا تمامًا من رغبتك في حذف جميع المفاتيح في قاعدة البيانات أو الخادم الخاص بك.

قد تكون في مصلحتك أن تقوم بـ إعادة تسمية هذه الأوامر إلى شيء يحتمل أقل احتمالًا لتشغيلها عن غير قصد.

لحذف جميع المفاتيح في قاعدة البيانات المحددة، استخدم الأمر flushdb:

  1. flushdb

لحذف جميع المفاتيح في كل قاعدة بيانات على خادم Redis (بما في ذلك قاعدة البيانات المحددة حاليًا)، قم بتشغيل flushall:

  1. flushall

كل من flushdb و flushall تقبل الخيار async، الذي يسمح لك بحذف جميع المفاتيح في قاعدة بيانات واحدة أو كل قاعدة بيانات في العنقود بشكل غير متزامن. يتيح ذلك لهم العمل بشكل مشابه لأمر unlink، وسيقومون بإنشاء خيط جديد لتحرير الذاكرة تدريجيًا في الخلفية.

نسخ احتياطي لقاعدة البيانات الخاصة بك

لإنشاء نسخة احتياطية من قاعدة البيانات المحددة حاليًا، يمكنك استخدام الأمر save:

  1. save

سيقوم هذا بتصدير لقطة لمجموعة البيانات الحالية كملف .rdb، وهو ملف نسخة احتياطية لقاعدة البيانات يحتوي على البيانات في تنسيق تسلسل داخلي مضغوط.

حفظ يعمل بشكل متزامن وسيقوم بحظر أي عملاء آخرين متصلين بقاعدة البيانات. لذلك، يوصي وثائق الأمر save بأنه يجب تقريباً ألا يتم تشغيل هذا الأمر في بيئة الإنتاج. بدلاً من ذلك، يقترح استخدام الأمر bgsave. هذا يخبر Redis بنسخ قاعدة البيانات: سيستمر العمل الرئيسي في خدمة العملاء بينما يقوم العملية الفرعية بحفظ قاعدة البيانات قبل الخروج:

  1. bgsave

يرجى ملاحظة أنه إذا قام العملاء بإضافة أو تعديل البيانات أثناء تنفيذ عملية bgsave، فإن هذه التغييرات لن يتم التقاطها في اللقطة.

يمكنك أيضاً تحرير ملف تكوين Redis ليقوم Redis بحفظ لقطة تلقائياً (المعروفة باسم تجميد الحالة أو وضع RDB) بعد مرور فترة معينة إذا تم إجراء عدد أدنى من التغييرات على قاعدة البيانات. يُعرف هذا باسم نقطة حفظ. يتم تمكين إعدادات نقطة الحفظ التالية افتراضيًا في ملف redis.conf:

/etc/redis/redis.conf
. . .
save 900 1
save 300 10
save 60 10000
. . .
dbfilename "nextfile.rdb"
. . .

بهذه الإعدادات، سيقوم Redis بتصدير لقطة من قاعدة البيانات إلى الملف المحدد بواسطة المعلمة dbfilename كل 900 ثانية إذا تم تغيير مفتاح واحد على الأقل، كل 300 ثانية إذا تم تغيير 10 مفاتيح على الأقل، وكل 60 ثانية إذا تم تغيير 10000 مفتاح على الأقل.

يمكنك استخدام الأمر shutdown لنسخ بيانات Redis الخاصة بك ثم إغلاق الاتصال الخاص بك. سيقوم هذا الأمر بحظر كل عميل متصل بقاعدة البيانات ثم يقوم بتنفيذ عملية save إذا تم تكوين نقطة حفظ واحدة على الأقل، مما يعني أنه سيقوم بتصدير قاعدة البيانات في حالتها الحالية إلى ملف .rdb مع منع العملاء من إجراء أي تغييرات.

بالإضافة إلى ذلك، سيقوم أمر shutdown بتفريغ التغييرات إلى ملف Redis’s append-only قبل الإنهاء إذا كان وضع append-only مفعلًا. يشمل وضع الملف الذي يتم إلحاقه (AOF) إنشاء سجل لكل عملية كتابة على الخادم في ملف ينتهي بـ .aof بعد كل لقطة. يمكن تمكين أوضاع AOF و RDB على نفس الخادم، واستخدام كلتا الطريقتين للتحميل هو وسيلة فعالة لنسخ الاحتياط لبياناتك.

باختصار، يعتبر أمر shutdown أساسًا أمر save تمنع أيضًا جميع التغييرات الحديثة إلى ملف append-only وتغلق الاتصال بمثيل Redis:

تحذير: يعتبر أمر shutdown خطيرًا. من خلال حجب عملاء خادم Redis، يمكنك جعل بياناتك غير متاحة للمستخدمين والتطبيقات التي تعتمد عليها. يُفضل تشغيل هذا الأمر فقط إذا كنت تختبر سلوك Redis أو إذا كنت واثقًا تمامًا من أنك تريد حجب كل عملاء خادم Redis.

في الواقع، قد يكون من مصلحتك أن تغيير اسم هذا الأمر إلى شيء يحتمل بشكل أقل تشغيله عن غير قصد.

  1. shutdown

إذا لم تكون قد قمت بتكوين نقاط الحفظ وترغب مع ذلك في أن يقوم Redis بتنفيذ عملية save، فأضف خيار save إلى أمر shutdown:

  1. shutdown save

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

  1. shutdown nosave

يرجى ملاحظة أن ملف الإلحاق فقد ينمو بشكل كبير مع مرور الوقت، لكن يمكنك تكوين Redis لإعادة كتابة الملف استنادًا إلى متغيرات معينة من خلال تحرير ملف redis.conf. يمكنك أيضًا توجيه Redis لإعادة كتابة ملف الإلحاق عن طريق تشغيل الأمر bgrewriteaof:

  1. bgrewriteaof

bgrewriteaof سيقوم بإنشاء مجموعة أقصر من الأوامر اللازمة لإعادة قاعدة البيانات إلى حالتها الحالية. كما يوحي اسم هذا الأمر، فإنه سيتم تشغيله في الخلفية. ومع ذلك، إذا كان هناك أمر آخر للتحميص يعمل بالفعل في عملية خلفية، يجب على ذلك الأمر الانتهاء قبل أن يقوم Redis بتنفيذ bgrewriteaof.

الاستنتاج

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

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

Source:
https://www.digitalocean.com/community/cheatsheets/how-to-manage-redis-databases-and-keys