امیر توحیدی
امیر توحیدی
خواندن ۲ دقیقه·۲ سال پیش

تجربه استفاده از redis در تعداد درخواست بالا در NODEJS

سلام وقت بخیر

من می خوام از تجربه خودم در استفاده از Redis در تعداد درخواست های بالا یک سری توضیحات بدم در حالتی که تعداد نوشتن و خواندن به مقدار نمایی در لحظه افزایش پیدا می کند.

در تجربه ای که بدست اومد ما در یکی از سرویس ها که با NODEJS و typescript توسعه میدیم از یک package به نام ioredis برای ارتباط با ردیس استفاده کردیم .

https://www.npmjs.com/package/ioredis

چالشی که در استفاده از این برای پیش اومد در زمینه مدیریت ارتباط با Redis ایجاد کرد.

در حالت عادی این پکیج و یا درایور برای استفاده از ردیس به سادگی کار می کند و نوشتن و خواندن از ردیس را مدیریت می کند. چالش زماین ایجاد می شود در یک لحظه به طور مثال درخواست به مقدار حدود 15 هزار درخواست خواندن و نوشتن در لحظه برای ردیس ایجاد می شود.
به علت مدیریت کانکشن به این صورت که برای هر درخواست جدید یک کانکشن باز می کند با رسیدن این سقف به 5 هزار کانکشن ردیس دچار مشکل می شود و نمی تواند درخواست به درستی هندل کند.

const Redis = require(&quotioredis&quot); const redis = new Redis(); redis.set(&quotmykey&quot, &quotvalue&quot); redis.get(&quotmykey&quot, (err, result) => { if (err) { console.error(err); } else { console.log(result); // Prints &quotvalue&quot } }); redis.get(&quotmykey&quot).then((result) => { console.log(result); // Prints &quotvalue&quot });

در قسمت بالا نمونه ای که خود نویسنده پکیج ارائه کرده قرار دادم .

البته در استفاده از این باید در تنظیمات ردیس بسیار دقت شود تا مدت بسته شدن کانکشن ردیس در صورت idle بودن با دقت مناسبی تنظیم شود چون در واقع هر ارتباط به صورت یکبار مصرف استفاده می شود و لزومی به نگهداری idle ها نیست


بعد از بررسی پکیج های موجود تقریبا 4 پکیج اصلی وجود دارد که این پکیج سایت رسمی Redis معرفی کرده است.

https://github.com/redis/node-redis

نمونه نحوه استفاده از این درایور می تونید مشاهده کنید

const client = createClient(); client.on('error', err => console.log('Redis Client Error', err)); await client.connect(); await client.set('key', 'value'); const value = await client.get('key'); await client.disconnect();

در استفاده از این پکیج مدیریت ارتباط با ردیس در واقع در اختیار ما قرا رمیگیره
با توجه به ساختار پروژه می توانید در موقع استارت پروژه یک connection با ردیس باز کنید.
و درخواست ها از اون طریق با ردیس رد و بدل کنید .

و با مدیریت و استفاده از event ها ارتباط مدیریت کنید .

redisردیسnodejstypescriptزبان برنامه نویسی typescript
امیر توحیدی هستم. برنامه نویس و توسعه دهنده یا هر چیزی که شما بگید. :)
شاید از این پست‌ها خوشتان بیاید