سلام وقت بخیر
من می خوام از تجربه خودم در استفاده از Redis در تعداد درخواست های بالا یک سری توضیحات بدم در حالتی که تعداد نوشتن و خواندن به مقدار نمایی در لحظه افزایش پیدا می کند.
در تجربه ای که بدست اومد ما در یکی از سرویس ها که با NODEJS و typescript توسعه میدیم از یک package به نام ioredis برای ارتباط با ردیس استفاده کردیم .
چالشی که در استفاده از این برای پیش اومد در زمینه مدیریت ارتباط با Redis ایجاد کرد.
در حالت عادی این پکیج و یا درایور برای استفاده از ردیس به سادگی کار می کند و نوشتن و خواندن از ردیس را مدیریت می کند. چالش زماین ایجاد می شود در یک لحظه به طور مثال درخواست به مقدار حدود 15 هزار درخواست خواندن و نوشتن در لحظه برای ردیس ایجاد می شود.
به علت مدیریت کانکشن به این صورت که برای هر درخواست جدید یک کانکشن باز می کند با رسیدن این سقف به 5 هزار کانکشن ردیس دچار مشکل می شود و نمی تواند درخواست به درستی هندل کند.
const Redis = require("ioredis"); const redis = new Redis(); redis.set("mykey", "value"); redis.get("mykey", (err, result) => { if (err) { console.error(err); } else { console.log(result); // Prints "value" } }); redis.get("mykey").then((result) => { console.log(result); // Prints "value" });
در قسمت بالا نمونه ای که خود نویسنده پکیج ارائه کرده قرار دادم .
البته در استفاده از این باید در تنظیمات ردیس بسیار دقت شود تا مدت بسته شدن کانکشن ردیس در صورت idle بودن با دقت مناسبی تنظیم شود چون در واقع هر ارتباط به صورت یکبار مصرف استفاده می شود و لزومی به نگهداری idle ها نیست
بعد از بررسی پکیج های موجود تقریبا 4 پکیج اصلی وجود دارد که این پکیج سایت رسمی 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 ها ارتباط مدیریت کنید .