ExpressJs

⌘K
  1. Home
  2. Docs
  3. ExpressJs
  4. Redis ক্যাশিং

Redis ক্যাশিং

Redis ক্যাশিংয়ের সাথে Node.js এ CRUD অপারেশন: সম্পূর্ণ টিউটোরিয়াল

এখানে আমরা একটি Node.js অ্যাপ্লিকেশন তৈরি করব যা TypeORM এবং Redis ব্যবহার করে একটি ব্যবহারকারী (User) টেবিলের CRUD অপারেশন সম্পাদন করবে। আমরা দেখাবো কিভাবে Redis ক্যাশিং ব্যবহৃত হয় ডেটা দ্রুত অ্যাক্সেস করার জন্য।

পদক্ষেপ ১: নতুন Node.js প্রকল্প তৈরি করা

  1. প্রকল্প তৈরি করুন:
mkdir node-redis-crud
cd node-redis-crud
npm init -y

প্রয়োজনীয় প্যাকেজগুলি ইনস্টল করুন:

npm install typeorm mysql2 redis
    • typeorm: ORM যা আমাদের ডেটাবেসের সাথে কাজ করবে।
    • mysql2: MySQL ডেটাবেসের জন্য ড্রাইভার।
    • redis: Redis ক্লায়েন্ট।

পদক্ষেপ ২: TypeORM কনফিগারেশন

  1. ormconfig.json ফাইল তৈরি করুন:
{
  "type": "mysql",
  "host": "localhost",
  "port": 3306,
  "username": "root",
  "password": "password",
  "database": "test",
  "entities": ["./src/entities/*.js"],
  "synchronize": true
}
    • এখানে ডেটাবেস কনফিগারেশন সেট করা হয়েছে। আপনার ডেটাবেসের তথ্য অনুযায়ী এই সেটিংস পরিবর্তন করুন।

পদক্ষেপ ৩: Redis ক্লায়েন্ট কনফিগারেশন

  1. utils/redisClient.js ফাইল তৈরি করুন:
const redis = require('redis');
const redisClient = redis.createClient(); // Redis ক্লায়েন্ট তৈরি করা

redisClient.on('error', (err) => {
    console.error('Redis ত্রুটি:', err); // Redis ত্রুটি লোগ করা
});

module.exports = redisClient; // Redis ক্লায়েন্ট এক্সপোর্ট করা

পদক্ষেপ ৪: Entity তৈরি করা

  1. src/entities/User.js ফাইল তৈরি করুন:
const { EntitySchema } = require('typeorm');

module.exports = new EntitySchema({
    name: 'User',
    tableName: 'users',
    columns: {
        id: {
            type: 'int',
            primary: true,
            generated: true,
        },
        username: {
            type: 'varchar',
            unique: true,
            nullable: false,
        },
        email: {
            type: 'varchar',
            unique: true,
            nullable: false,
        },
        password: {
            type: 'varchar',
            nullable: false,
        },
    },
});
    • এখানে User entity ডিফাইন করা হয়েছে যা ডেটাবেসের users টেবিলের সাথে ম্যাপ করে।

পদক্ষেপ ৫: CRUD অপারেশন তৈরি করা

  1. src/crud/userCrud.js ফাইল তৈরি করুন:
const { getRepository } = require('typeorm'); // TypeORM থেকে getRepository ফাংশন ইম্পোর্ট করা
const User = require('../entities/User');     // User entity ইম্পোর্ট করা
const redisClient = require('../utils/redisClient'); // Redis ক্লায়েন্ট ইম্পোর্ট করা

// ব্যবহারকারী আইডি দিয়ে ব্যবহারকারী তথ্য নেওয়া
const getUserById = async (id) => {
    const cacheKey = `user:${id}`;  // ক্যাশে কী তৈরি করা (যেমন: user:1)

    // Redis ক্যাশে ব্যবহারকারী ডেটা আছে কিনা পরীক্ষা করা
    let user = await redisClient.get(cacheKey);

    if (user) {
        console.log('Redis ক্যাশ থেকে সার্ভিং হচ্ছে'); // ক্যাশে পাওয়া গেলে লগ করা
        return JSON.parse(user); // ক্যাশ থেকে পাওয়া JSON ডেটা পার্স করে ফেরত দেয়া
    }

    // যদি ক্যাশে না পাওয়া যায়, তাহলে ডেটাবেস থেকে ডেটা নিয়ে আসা
    const userRepository = getRepository(User); // User repository পাওয়া
    user = await userRepository.findOne(id); // ডেটাবেস থেকে নির্দিষ্ট আইডি দিয়ে ব্যবহারকারী খুঁজে পাওয়া

    if (user) {
        // Redis ক্যাশে ফলাফল সংরক্ষণ করা
        await redisClient.set(cacheKey, JSON.stringify(user), 'EX', 3600);  // ১ ঘণ্টা (3600 সেকেন্ড) ক্যাশে রাখা
    }

    return user; // ব্যবহারকারী ডেটা ফেরত দেয়া
};

// নতুন ব্যবহারকারী তৈরি করা
const createUser = async (username, email, password) => {
    const userRepository = getRepository(User); // User repository পাওয়া
    const user = userRepository.create({ username, email, password }); // নতুন ব্যবহারকারী তৈরি করা
    await userRepository.save(user); // ব্যবহারকারী ডেটাবেসে সেভ করা

    // ক্যাশে নতুন ব্যবহারকারী সংরক্ষণ করা
    const cacheKey = `user:${user.id}`;
    await redisClient.set(cacheKey, JSON.stringify(user), 'EX', 3600); // ক্যাশে রাখা

    return user; // নতুন ব্যবহারকারী ফেরত দেয়া
};

// ব্যবহারকারী আপডেট করা
const updateUser = async (id, updateData) => {
    const userRepository = getRepository(User); // User repository পাওয়া
    let user = await userRepository.findOne(id); // ব্যবহারকারী খুঁজে পাওয়া

    if (user) {
        // আপডেট করা
        user = { ...user, ...updateData };
        await userRepository.save(user); // ডেটাবেসে আপডেট করা

        // ক্যাশে নতুন ডেটা আপডেট করা
        const cacheKey = `user:${id}`;
        await redisClient.set(cacheKey, JSON.stringify(user), 'EX', 3600); // ক্যাশে রাখা
    }

    return user; // আপডেটকৃত ব্যবহারকারী ফেরত দেয়া
};

// ব্যবহারকারী মুছে ফেলা
const deleteUser = async (id) => {
    const userRepository = getRepository(User); // User repository পাওয়া
    const user = await userRepository.findOne(id); // ব্যবহারকারী খুঁজে পাওয়া

    if (user) {
        await userRepository.remove(user); // ব্যবহারকারী ডেটাবেস থেকে মুছে ফেলা

        // ক্যাশে ডেটা মুছে ফেলা
        const cacheKey = `user:${id}`;
        await redisClient.del(cacheKey); // ক্যাশে থেকে মুছে ফেলা
    }

    return user; // মুছে ফেলা ব্যবহারকারী ফেরত দেয়া
};

module.exports = {
    getUserById,
    createUser,
    updateUser,
    deleteUser
};
    • getUserById: একটি ব্যবহারকারীর তথ্য ক্যাশে পরীক্ষা করে, যদি না পাওয়া যায় তাহলে ডেটাবেস থেকে নিয়ে আসে এবং ক্যাশে সেভ করে।
    • createUser: নতুন ব্যবহারকারী তৈরি করে, ডেটাবেসে সেভ করে এবং ক্যাশে সেভ করে।
    • updateUser: ব্যবহারকারীর তথ্য আপডেট করে, ডেটাবেসে সেভ করে এবং ক্যাশে আপডেট করে।
    • deleteUser: ব্যবহারকারী মুছে ফেলে এবং ক্যাশে থেকে সরিয়ে দেয়।

পদক্ষেপ ৬: অ্যাপ্লিকেশন চালানো

  1. src/index.js ফাইল তৈরি করুন:
const { createConnection } = require('typeorm'); // TypeORM থেকে createConnection ইম্পোর্ট করা
const { getUserById, createUser, updateUser, deleteUser } = require('./crud/userCrud'); // CRUD ফাংশন ইম্পোর্ট করা

const start = async () => {
    // ডেটাবেসে সংযোগ তৈরি করা
    await createConnection();

    // কিছু অপারেশন পরীক্ষা করা
    const newUser = await createUser('john_doe', 'john@example.com', 'password123');
    console.log('নতুন ব্যবহারকারী:', newUser);

    const user = await getUserById(newUser.id);
    console.log('ব্যবহারকারী তথ্য:', user);

    const updatedUser = await updateUser(newUser.id, { password: 'newpassword123' });
    console.log('আপডেটকৃত ব্যবহারকারী:', updatedUser);

    const deletedUser = await deleteUser(newUser.id);
    console.log('মুছে ফেলা ব্যবহারকারী:', deletedUser);
};

start();
    • createConnection(): ডেটাবেসে সংযোগ তৈরি করে।
    • CRUD অপারেশন ফাংশনগুলো ব্যবহার করে বিভিন্ন কার্যক্রম পরীক্ষা করা হয়।

সংক্ষেপে:

  • আমরা একটি Node.js অ্যাপ্লিকেশন তৈরি করেছি যা TypeORM এবং Redis ব্যবহার করে CRUD অপারেশন সম্পাদন করে।
  • ক্যাশিং ব্যবহারের মাধ্যমে, আমরা ডেটা দ্রুত এক্সেস করতে পারি এবং ডেটাবেসের লোড কমাতে পারি।

এই টিউটোরিয়ালটি অনুসরণ করে আপনি Redis ক্যাশিং সহ TypeORM ব্যবহার করে CRUD অপারেশনগুলি পরিচালনা করতে পারবেন।

How can we help?