Redis একটি ওপেন-সোর্স ইন-মেমরি ডাটাবেস যা সাধারণত ক্যাশিং এবং ডেটা স্টোরেজ হিসেবে ব্যবহৃত হয়। এটি খুব দ্রুত কাজ করে এবং বড় পরিমাণে ডেটা স্টোর করতে সক্ষম, কারণ Redis মূলত মেমরিতে ডেটা সঞ্চয় করে। এক্সপ্রেস অ্যাপে Redis ব্যবহার করলে অ্যাপ্লিকেশনের পারফরম্যান্স উল্লেখযোগ্যভাবে বৃদ্ধি পেতে পারে, বিশেষ করে যখন ডেটাবেস বা তৃতীয় পক্ষের API থেকে বারবার ডেটা রিটারিভ করতে হয়।
Redis ক্যাশিং সাধারণত ব্যবহার করা হয়:
- বারবার একই ডেটা রিট্রিভ করার ক্ষেত্রে।
- ভারী ডেটাবেস কোয়েরি বা API কলগুলোকে দ্রুততর করার জন্য।
- ওয়েব অ্যাপ্লিকেশনের লোড কমানোর জন্য।
Redis দিয়ে পারফরম্যান্স বুস্ট করার জন্য আমরা মূলত ডেটা ক্যাশিং প্রক্রিয়া ব্যবহার করব, যেখানে সার্ভার প্রথমে Redis থেকে ডেটা চেক করবে, এবং যদি ডেটা সেখানে না থাকে তবে ডেটাবেস বা API থেকে তা নিয়ে Redis ক্যাশে সংরক্ষণ করবে।
১. Redis এবং ExpressJS এর মধ্যে সংযোগ স্থাপন
ExpressJS অ্যাপে Redis ব্যবহার করার জন্য প্রথমে redis প্যাকেজটি ইনস্টল করতে হবে:
১.১. Redis প্যাকেজ ইনস্টল করা
npm install redis
১.২. Redis ইনস্টল এবং কনফিগারেশন
Redis সার্ভার আপনার লোকালহোস্ট বা রিমোট সার্ভারে চলতে হবে। সাধারণত, লোকাল Redis সার্ভারটি ডিফল্ট পোর্ট 6379 তে চলে।
Redis এবং ExpressJS-এর সংযোগ স্থাপন করতে নিচের কোডটি ব্যবহার করা যেতে পারে:
const express = require('express');
const redis = require('redis');
const app = express();
// Redis ক্লায়েন্ট তৈরি
const client = redis.createClient({
host: 'localhost', // Redis সার্ভারের হোস্টনেম (লোকালহোস্ট হলে)
port: 6379 // Redis সার্ভারের পোর্ট (ডিফল্ট 6379)
});
// Redis এর সাথে সংযোগ স্থাপন
client.on('connect', () => {
console.log('Connected to Redis');
});
// ডেটা ক্যাশিং রাউট
app.get('/data', (req, res) => {
const userId = req.query.userId;
// প্রথমে Redis ক্যাশ চেক করা
client.get(userId, (err, data) => {
if (data) {
console.log('Data from cache');
return res.json(JSON.parse(data)); // ক্যাশ থেকে ডেটা রিটার্ন করা
} else {
console.log('Data from database');
// এখানে ডেটাবেস থেকে ডেটা আনার কোড হবে
const dbData = { userId, name: 'John Doe', age: 30 };
// ডেটা Redis ক্যাশে সংরক্ষণ করা (10 মিনিটের জন্য)
client.setex(userId, 600, JSON.stringify(dbData));
return res.json(dbData); // ডেটাবেস থেকে পাওয়া ডেটা রিটার্ন করা
}
});
});
// সার্ভার চালু করা
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
কোড ব্যাখ্যা:
- Redis ক্লায়েন্ট তৈরি: Redis সার্ভারে সংযোগ স্থাপন করতে
redis.createClient()ব্যবহার করা হয়। এখানেhostএবংportকনফিগার করা হয়েছে। client.get(): Redis থেকে ডেটা রিটারিভ করার জন্য ব্যবহার করা হয়। যদি ডেটা পাওয়া যায় তবে তা সরাসরি রিটার্ন করা হয়।client.setex(): ডেটা Redis ক্যাশে সংরক্ষণ করার জন্য। এখানেsetexমেথড ব্যবহার করা হয়েছে যা ডেটা এক্সপায়ার টাইম (এখানে ১০ মিনিট) সেট করতে সাহায্য করে।
২. Redis Cache ব্যবহার করার সুবিধা
Redis ক্যাশিং ব্যবহারের মাধ্যমে ExpressJS অ্যাপ্লিকেশনের পারফরম্যান্স অনেক বেড়ে যেতে পারে। এর কিছু প্রধান সুবিধা:
২.১. দ্রুত ডেটা রিটার্ভাল
Redis ইন-মেমরি ডেটাবেস হওয়ায় ডেটা খুব দ্রুত রিটার্ন হয়। ফলে সার্ভার প্রতিটি রিকোয়েস্টের জন্য ডেটাবেসে হিট না করে সরাসরি Redis ক্যাশ থেকে ডেটা নিয়ে আসে।
২.২. লোড কমানো
ডেটাবেস বা API সার্ভারের উপর অতিরিক্ত লোড কমিয়ে দেয়। Redis ক্যাশে ডেটা সংরক্ষিত থাকলে পরবর্তী রিকোয়েস্টগুলো দ্রুত রেসপন্স পায়, যার ফলে ব্যাকএন্ড সিস্টেমের চাপ কমে যায়।
২.৩. ডেটা এক্সপায়ার টাইম
Redis ক্যাশে ডেটা সেভ করার সময় নির্দিষ্ট সময়সীমা (TTL) সেট করা যায়। এটি ডেটা পুরনো হলে স্বয়ংক্রিয়ভাবে মুছে ফেলে, যাতে আপনার ক্যাশে তাজা ডেটা থাকে।
৩. Redis Cache ব্যবহারের মাধ্যমে পারফরম্যান্স বুস্ট
Redis ক্যাশিং ব্যবহারের মাধ্যমে আপনার ওয়েব অ্যাপ্লিকেশনের পারফরম্যান্সের ক্ষেত্রে নিম্নলিখিত পার্থক্য লক্ষ্য করা যেতে পারে:
৩.১. বারবার ডেটাবেস কল কমানো
প্রতিটি রিকোয়েস্টের জন্য ডেটাবেসে কল করা হয়, যা খুবই সময়সাপেক্ষ এবং ব্যয়বহুল হতে পারে। Redis ক্যাশ ব্যবহারের ফলে প্রতিবার একই ডেটা ক্যাশে পাওয়া যায় এবং ডেটাবেসে কলের প্রয়োজন পড়ে না।
৩.২. স্কেলেবল সিস্টেম তৈরি
Redis ক্যাশ ব্যবহারের মাধ্যমে সিস্টেমের স্কেলেবিলিটি বাড়ানো যায়। বিশেষ করে বড় স্কেল অ্যাপ্লিকেশনে যেখানে ব্যবহারকারীর সংখ্যা অনেক বেশি এবং ডেটাবেস কল বেশি হয়, Redis ক্যাশ ব্যবহার করলে অ্যাপ্লিকেশন অনেক দ্রুত রেসপন্ড করতে সক্ষম হয়।
৪. Redis Cache উন্নত ব্যবহার
Redis Cache ব্যবহার করার পর আরও উন্নত পারফরম্যান্স পেতে কিছু অতিরিক্ত কৌশল ব্যবহার করা যেতে পারে:
৪.১. Pipeline ব্যবহার
Redis পিপলাইনিংয়ের মাধ্যমে একাধিক কমান্ড একসাথে প্রেরণ করা যায়, যা সার্ভারের ওপরে লোড কমায় এবং ডেটা প্রক্রিয়াকরণ দ্রুততর করে।
client.multi()
.set('key1', 'value1')
.set('key2', 'value2')
.exec((err, replies) => {
console.log(replies);
});
৪.২. Redis Pub/Sub
Redis এর Pub/Sub ফিচারটি ব্যবহার করে অ্যাপ্লিকেশনগুলো একে অপরের সাথে রিয়েল-টাইমে ডেটা শেয়ার করতে পারে।
// Subscriber (পাবলিশারের মেসেজ গ্রহণ)
client.subscribe('my_channel');
client.on('message', (channel, message) => {
console.log(`Received message: ${message}`);
});
// Publisher (মেসেজ পাঠানো)
client.publish('my_channel', 'Hello, Redis!');
৪.৩. Cluster Mode ব্যবহার
Redis ক্লাস্টার মোড ব্যবহারের মাধ্যমে আপনি ডেটা সেন্টার বা সার্ভার গ্রুপে ডেটা সঞ্চয় করতে পারেন, যা উচ্চতর স্কেলেবিলিটি এবং রিলায়েবিলিটি নিশ্চিত করে।
সারাংশ
Redis ক্যাশিং ব্যবহারের মাধ্যমে ExpressJS অ্যাপ্লিকেশনগুলোর পারফরম্যান্স ব্যাপকভাবে উন্নত করা সম্ভব। Redis দ্রুত ইন-মেমরি ডেটাবেস, যা ডেটার দ্রুত রিটার্ভাল, ডেটাবেস কল কমানো এবং সিস্টেমের লোড কমাতে সাহায্য করে। এর মাধ্যমে অ্যাপ্লিকেশনগুলো দ্রুততর, স্কেলেবল এবং আরও কার্যকরী হয়। Redis এর বিভিন্ন ফিচার যেমন Pipeline, Pub/Sub এবং Cluster Mode ব্যবহারের মাধ্যমে আপনি আরো উন্নত পারফরম্যান্স পেতে পারেন।
Read more