كيفية البدء سريعًا باستخدام VUE3.0: دعنا نتعرف
على استخدام وظيفة redis
في nodejs
. لم أجد مقالة كاملة وسهلة الفهم نسبيًا، لذلك قمت أيضًا بالكثير من التحويلات أثناء التطوير وتصحيح الأخطاء. عملية.
ستقدم هذه المقالة بالتفصيل كيفية بناء مجموعة redis محليًا، وكيفية استخدام المجموعة على العميل، وتلخيص وشرح المشكلات والأخطاء التي تمت مواجهتها أثناء عملية الإنشاء لتجنب الانعطافات في المرة القادمة وتحسين التطوير وكفاءة العمل.
خلفية استخدام المجموعة هي: في وضع Redis الفردي، مع زيادة عدد المستخدمين والزيارات، ترتفع قيمة qps بشكل حاد؟؟، يؤدي عدد كبير من عمليات io
إلى cpu(100%)
عند في وقت معين، قد يكون هناك وقت توقف في أي وقت، وهو أمر خطير، وفي الوقت نفسه، تعالج redis المعالجة المجمعة والطرق الأخرى الأعراض فقط وليس السبب الجذري، ولا يمكنها اختراق عنق الزجاجة في أداء الخادم . لذلك، من الضروري استخدام حل نظام المجموعة أو إضافة مثيلات redis.
تشير المجموعة بشكل عام إلى مجموعة الخوادم، والتي تختلف عن النظام الموزع، فهي تجمع العديد من الخوادم معًا لأداء نفس الخدمة، ويبدو من وجهة نظر العميل أن هناك خادمًا واحدًا فقط. يمكن للمجموعة استخدام أجهزة كمبيوتر متعددة للحوسبة المتوازية لتحقيق سرعة حوسبة عالية، ويمكنها أيضًا استخدام أجهزة كمبيوتر متعددة للنسخ الاحتياطي، بحيث إذا تعطل أي جهاز، فسيظل النظام بأكمله يعمل بشكل طبيعي. ( قبل redis3.0، تم استخدام وضع الحارس بشكل عام، ولكن تكوين الحارس معقد بعض الشيء، والأداء والتوافر العالي متوسطان )
أنه نظرًا لآلية التسامح مع خطأ التصويت، فإن أكثر من نصف تعتقد العقد أن عقدة معينة قد فشلت. العقدة معطلة، لذلك لا يمكن لعقدتين تشكيل مجموعة، لذلك تتطلب مجموعة Redis 3 عقد على الأقل.
لضمان التوفر العالي للمجموعة، تحتاج كل عقدة إلى عقدة تابعة (أي عقدة احتياطية)، لذلك تتطلب مجموعة Redis
6 خوادم على الأقل. (ثلاثة سادة وثلاثة تابعين، وثلاثة إيداعات وثلاثة عمليات استرجاع، وتوافر عالٍ، ونسخ احتياطي)
بالطبع ، من المستحيل بالنسبة لنا استخدام العديد من الخوادم عند تصحيح الأخطاء محليًا، حتى نتمكن من محاكاة تشغيل 6 مثيلات redis
محليًا مجموعة Redis في بيئة الإنتاج هي في الأساس نفس البنية الموجودة هنا.
. يمكنك اختيار تثبيته على الموقع الرسمي، أو يمكنك تثبيته باستخدام السطر المسمى
#install Brew install redis #بدء تشغيل خادم redis # أدخل عميل redis redis-cli
يجب عليك أولاً العثور على موقع
brew list redis
# تحقق من موقع تثبيت rediscd /opt/homebrew/Cellar/redis/6.2.4
# أدخل الإصدار وفقًا للموقع المجلد الذي يوجد به الرقمopen .
# افتح المجلدXcode.app
لفتح homebrew.mxcl.redis.plist
للعثور على موقع redis.conf
، كما هو موضح. أقل:قم بإنشاء ستة ملفات تكوين خدمة
cd /opt/homebrew/etc/
(دليل ملف التكوين الموجود في الخطوة السابقة)
# يجب أن تكون في المسار /opt/homebrew/etc/ mkdir -p redis/cluster/7000 mkdir -p redis/cluster/7001 mkdir -p redis/cluster/7002 mkdir -p redis/cluster/7003 mkdir -p redis/cluster/7004 mkdir -p redis/cluster/7005
تعديل ملف التكوين
لا يحتاج ملف التكوين الموجود ضمن المسار /opt/homebrew/etc/redis.conf
إلى التعديل، ما عليك سوى نسخه إلى دليل redis/cluster/7000
الذي تم إنشاؤه أعلاه خطوات تعديله هي كما يلي:
cd /opt/homebrew/etc/ # أدخل دليل ملف التكوين cp redis.conf redis/cluster/7000/7000.conf. كود redis/cluster/7000/7000.conf # افتح ملف التكوين باستخدام محرر أو vim لتعديله
7000.conf
، قم بتعديل الخصائص التالية# رقم منفذ Redis (يجب تعديل كل ملف تكوين 7000-7005). المنفذ 7000 # تمكين وضع الكتلة وتشغيل نعم تمكين الكتلة # مسار ملف التكوين لملف التكوين الداخلي للمجموعة، العقد الافتراضية-6379.conf (يجب تعديل كل ملف تكوين 7000-7005) ملف تكوين الكتلة العقد-7000.conf # مهلة الاتصال بين العقد - مهلة العقدة العنقودية 5000 # ملحق استمرارية البيانات نعم فقط
cd /opt/homebrew/etc/redis/cluster # أدخل دليل ملف التكوين cp 7000/7000.conf 7001/7001.conf cp 7000/7000.conf 7002/7002.conf cp 7000/7000.conf 7003/7003.conf cp 7000/7000.conf 7004/7004.conf cp 7000/7000.conf 7005/7005.conf
7001.conf-7005.conf
ملاحظة: يجب أن يقوم كل ملف تكوين بتكوين port和cluster-config-file
قيمة port和cluster-config-file
(وإلا فإن المجموعة لن تصبح نافذة المفعول)، والتي تتميز بالمنفذ.
يمكن العثور على دليل ملف التكوين من خلال الأمر find /opt/homebrew -name nodes-7000.conf
.
نظرًا لأننا قمنا بتكوين 6 خدمات، فمن المستحيل تشغيلها أو إيقافها واحدة تلو الأخرى. تحتاج إلى استخدام برنامج نصي Shell للدخول
إلى الدليل /opt/homebrew/etc/redis/cluster
وإنشاءه. ملف start.sh وإيقاف .sh
# ملف start.sh#!/bin/sh redis-server /opt/homebrew/etc/redis/cluster/7000/7000.conf & redis-server /opt/homebrew/etc/redis/cluster/7001/7001.conf & redis-server /opt/homebrew/etc/redis/cluster/7002/7002.conf & redis-server /opt/homebrew/etc/redis/cluster/7003/7003.conf & redis-server /opt/homebrew/etc/redis/cluster/7004/7004.conf & redis-server /opt/homebrew/etc/redis/cluster/7005/7005.conf & # ملف stop.sh #!/bin/sh redis-cli -p 7000 إيقاف التشغيل & redis-cli -p 7001 إيقاف التشغيل & redis-cli -p 7002 إيقاف التشغيل & redis-cli -p 7003 إيقاف التشغيل & redis-cli -p 7004 إيقاف التشغيل & redis-cli -p 7005 إيقاف التشغيل
وتنفيذ ./start.sh
أو ./stop.sh
لبدء الخدمة وإيقافها.
قم بتنفيذ ps -ef |grep redis
لعرض خدمة redis التي تم تشغيلها.
ملاحظة: مطلوب تنفيذ ./. start.sh لأول مرة، قم بتفويض أذونات التنفيذ من خلال sudo chmod +x start.sh
redis-cli -p 7000 # بدء عميل واحد redis-server 7000/7000.conf # بدء خادم واحد redis-cli -p 7000 Shutdown # إيقاف تشغيل الخادم sudo chmod +x start.sh # تمكين إذن تنفيذ البرنامج النصي # تعيين علاقة redis الرئيسية والعبد (ثلاثة أسياد وثلاثة عبيد) redis-cli --إنشاء مجموعة --النسخ المتماثلة العنقودية 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 عقد الكتلة # عرض حالة عقدة الكتلة (أدخل عميلاً للتنفيذ) معلومات المجموعة # عرض معلومات المجموعة (أدخل عميلاً للتنفيذ) عرض جميع القيم الأساسية: المفاتيح * احذف القيمة الموجودة في الفهرس المحدد: مفتاح del امسح بيانات خادم Redis بالكامل: Flushall امسح جميع المفاتيح في المكتبة الحالية:
، يوفر Redis.Cluster وظيفة التقسيم التلقائي على عقد Redis المتعددة. استخدم خوادم redis الستة التي تم إنشاؤها مسبقًا، ثم ابدأ تشغيل node redis.js
يمكنك اختبار تأثير الكتلة. ioredis
// redis.js const Redis = require("ioredis"); كتلة ثابتة = مجموعة Redis جديدة([ { المنفذ: 7000، المضيف: "127.0.0.1"، }, { المنفذ: 7001، المضيف: "127.0.0.1"، }, ]); block.set("foo", "bar"); cluster.get("foo", (err, res) => { // الدقة === "شريط" });
قائمة انتظار الاستيراد من "الثور" // إنشاء مثيل لقائمة انتظار redis const example = new Queue('custom', { البادئة : '{myprefix}'، إنشاء العميل (نوع) { // مثيل الكتلة هو نفس ما ورد أعلاه returncluster } }) // إضافة البيانات إلى قائمة انتظار redis (المنتج) مثيل.إضافة( 'طلب'، { ...المعلمات }, { RemoveOnComplete: خطأ } ).قبض (ه => { console.error(ه) }) // مثيل رد الاتصال للمستهلك ('request'، 5، غير متزامن (مهمة، تم) => { console.log ("الحصول على البيانات المستهلكة حاليًا:"، job.data) // تنفيذ عملية غير متزامنة في انتظار الوعد الجديد((الحل)=>الحل()) منتهي() })
هناك مشكلة عند استخدام إطار عمل bull
للاتصال بمجموعة ioredis
: في كل مرة push
البيانات إلى قائمة انتظار redis
، قد يتم تشغيل وظيفة رد الاتصال المقابلة عدة مرات، ومن المستحيل حاليًا تحديد ما إذا كانت هناك مشكلة أم لا استخدام أو مشكلة في الإطار نفسه (إذا كنت تعرف المزيد، مرحباً بالجميع، اترك رسالة للإعلام).
بديل للتجميع: إذا لم تكن هناك حاجة لمزامنة البيانات وترحيل البيانات، فيمكن استخدام مثيلات redis
المتعددة على العميل، مع دمجها مع Math.random()
لتقسيم البيانات بالتساوي إلى أحد redis
، وبالتالي حل مشكلة أجهزة المثيل الفردي ( cpu
وما إلى ذلك) مشكلة عنق الزجاجة.
1. هل حدث خطأ عند الاتصال بـ redis ضمن نظام Mac؟
رسالة خطأ وحدة التحكم: تعذر الاتصال بـ Redis على 127.0.0.1:6379: تم رفض الاتصال
السبب: لم يبدأ الخادم أو فشل في بدء التشغيل
الحل: تحتاج إلى بدء تشغيل خادم redis أولاًالرابط
المرجعي
لخادم redis
https://blog.csdn.net/qq_23347459/article/details/104257529
2. عند بدء تشغيل العميل، هل يبلغ عن خطأ عند القراءة أو الكتابة؟
رسالة الخطأ: ClusterAllFailedError: فشل تحديث ذاكرة التخزين المؤقت للفتحات
السبب: سمات ملف تكوين المجموعة في ملفات التكوين ضمن كل خدمة متسقة.
المعالجة: تعديل إلى قيمة السمة الفريدة
الرابط المرجعي 1
https://stackoverflow.com/questions/57350961/ioredis-clusterallfailederror-failed-to-refresh-slots-cache
المرجع 2
https://github.com/luin/ioredis/ issues /711
3. فشل تنفيذ عبارة إنشاء السيد والعبد redis؟
تنفيذ العبارة: redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
خطأ موجه: [ERR] Node 127.0.0.1:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0
: عند تنفيذ عبارة الإنشاء، لا يتم مسح البيانات ولا تتم إعادة تعيين المجموعة
المعالجة:
مسح البيانات وإعادة ضبط المجموعة ومسح ملفات rdb وaof،
راجع مسح بيانات redis
https://stackoverflow.com/questions/37206993/redis-server-cluster-not-working
# الاستفادة من خدمة المنفذ 7000. على سبيل المثال، كرر العمليات التالية لـ 7001-7005 $redis-cli -p 7000 127.0.0.1:7000> فلوشال 127.0.0.1:7000> إعادة تعيين الكتلة 127.0.0.1:7000>خروج # استخدم البحث للعثور على ملفات rdb وaof (أيضًا في دليل rdb) ابحث عن /opt/homebrew -name dump.rdb # أعد تنفيذ عبارة الإنشاء بنجاح redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1: 7005
إن استخدام مجموعة redis على العميل بسيط جدًا، وبالمقارنة، سيكون التكوين على الخادم أكثر تعقيدًا.
يتم شرح الاستخدام المحدد للعميل بشكل موجز فقط. أثناء الاستخدام، يجب الانتباه إلى مشكلات مثل مزامنة بيانات redis وترحيلها.
على الرغم من أن استخدام المجموعة يمكن أن يحسن قدرات الخدمة، ويدعم النسخ المتماثل للسيد والعبد، ووضع الحارس، وفصل القراءة والكتابة، وتوزيع الضغط بالتساوي على الخادم، وما إلى ذلك. ومع ذلك، فهو لا يحتوي على وظائف التسامح مع الأخطاء والاسترداد تلقائيًا. في حالة حدوث فترة توقف، ستفشل بعض طلبات القراءة والكتابة، مما يقلل من توفر النظام. عند الاستخدام، قم بتحليل واختيار حلول مختلفة بناءً على ظروف العمل.
هذه المقالة مستنسخة من: https://juejin.cn/post/7079928963107127327
الكاتب : تاجر