নতুন রেলস অ্যাপ জেনারেট করলে ক্যাশিং ইতিমধ্যে সেট আপ থাকে। এটা দ্রুত শুরু করার সুবিধা দেয়—ভিউ ফ্র্যাগমেন্ট cache হেল্পার দিয়ে র্যাপ করুন বা এক্সটার্নাল API রেজাল্ট স্টোর করতে Rails.cache.fetch ব্যবহার করুন। ক্যাশড ডেটা রেলসের ক্যাশ স্টোরগুলোর একটিতে স্টোর হয়, যা ডেটা মেমরিতে, মেমক্যাশড, রেডিসে, বা এমনকি ডিস্কে সরাসরি লিখতে পারে।
কিন্তু কোন ক্যাশ স্টোর কোন পরিস্থিতিতে সেরা? এই ওভারভিউতে আমরা প্রতিটি অপশন দেখব।
👋 এবং আপনি যদি এই আর্টিকেল পছন্দ করেন, তবে রুবি (অন রেইলস) পারফরম্যান্স নিয়ে আরও অনেক কিছু লিখেছি, আমাদের রুবি পারফরম্যান্স মনিটরিং চেকলিস্ট দেখুন।
ফাইল স্টোর
:file_store ডিফল্টভাবে ব্যবহৃত হয় যখন কোন ক্যাশ স্টোর স্পেসিফিক্যালি কনফিগার করা না থাকে। নাম অনুযায়ী, এটা ক্যাশ এন্ট্রি ফাইল সিস্টেমে লিখে। এগুলো অ্যাপ্লিকেশনের রুটে tmp/cache ডিরেক্টরিতে থাকে যদি না আপনি আলাদা লোকেশন সিলেক্ট করেন এক্সপ্লিসিটলি cache_store কনফিগারেশন :file_store সেট করে এবং পছন্দের ডিরেক্টরির পাথ পাস করে।
config.cache_store = :file_store , "/path/to/cache/directory"
ক্যাশ ফাইলগুলো ডিস্কে সেভ হয় এবং সেগুলো অটোমেটিক্যালি পার্জ হয় না। এর মানে আপনাকে নিজে সেগুলো রিমুভ করতে হবে যাতে ডিস্ক ফুল না হয়। উদাহরণস্বরূপ, পেরিয়ডিক্যালি Rails.cache.cleanup চালানোর মাধ্যমে আপনার ক্যাশ এক্সপায়ারড এন্ট্রি থেকে মুক্ত রাখতে পারেন।
ফাইল স্টোর ডেভেলপমেন্টে উপকারী কারণ প্রতিটি এন্ট্রি ক্যাশ ডিরেক্টরিতে স্টোর হয়, যাতে আপনি এর ফাইল রিমুভ করে ক্যাশ থেকে একটি আইটেম ড্রপ করতে পারেন। এটি ক্যাশ ইনভ্যালিডেশন টেস্ট করার জন্য উপকারী।
প্রোডাকশনে, ফাইল স্টোর উপকারী যখন প্রতিটি সার্ভার প্রসেস একই ফাইল সিস্টেমে রান করে। যদিও মেমরি-বেসড ক্যাশ স্টোর চেয়ে ধীর, ফাইল স্টোর খুব ভালো হতে পারে যদি ক্যাশ খুব বড় হতে পারে।
মেমরি স্টোর
ভার্সন ৫.০ থেকে, রেলস অটোমেটিক্যালি ডেভেলপমেন্ট কনফিগারেশনে নতুন অ্যাপ জেনারেট করার সময় :memory_store সেট আপ করে। মেমরি স্টোর ব্যবহার করলে ক্যাশড ডেটা রুবি ওয়েব সার্ভারের প্রসেসে মেমরিতে রাখা হয়।
কারণ ডেটা আপনার ওয়েব সার্ভারের মতো একই প্রসেসে মেমরিতে থাকে, মেমরি স্টোর ডেভেলপমেন্টে ব্যবহার করার জন্য চমৎকার কারণ আপনার ডেভেলপমেন্ট ওয়েব সার্ভার রিস্টার্ট করলে সেটি অটোমেটিক্যালি ক্লিয়ার হয়।
ডিফল্টভাবে, ইন-মেমরি স্টোর ৩২ মেগাবাইট ব্যবহার করে, কিন্তু আপনি ক্যাশ স্টোর কনফিগার করার সময় :size অপশন পাস করে সেটি ওভাররাইড করতে পারেন।
config.cache_store = :memory_store, { size: 16.megabytes }
ক্যাশ ফুল হলে, লিস্ট রিসেন্টলি ইউজড এন্ট্রিগুলো অটোমেটিক্যালি ক্যাশ থেকে ড্রপ হয় নতুন এন্ট্রির জায়গা তৈরি করতে।
প্রোডাকশনে মেমরি স্টোর ব্যবহার করা সম্ভব (এবং সবচেয়ে দ্রুত সমাধান), কিন্তু একাধিক সার্ভার প্রসেস রান করা সিস্টেমের জন্য রিকমেন্ড করা হয় না। যেহেতু প্রসেসগুলো একে অপরর ক্যাশ এক্সেস করতে পারে না, প্রতিটি প্রসেসকে ক্যাশের নিজস্ব কপি মেইনটেইন করতে হয়।
মেমক্যাশ স্টোর
:mem_cache_store ডালি জেম এবং মেমক্যাশড ব্যবহার করে এন্ট্রি একটি সেন্ট্রালাইজড, ইন-মেমরি ক্যাশে স্টোর করে।
ডেটা একটি আলাদা প্রসেসে রাখা হয় রুবি সার্ভার প্রসেসের বদলে। এর কারনে, আপনার অ্যাপ রিস্টার্ট করলে ক্যাশ ড্রপ হয় না বরং মেমরিতে থাকে যতক্ষণ মেমক্যাশড সার্ভার চালু থাকে। সেটি রিস্টার্ট হলে, আপনি ফ্রেশ ক্যাশ দিয়ে শুরু করবেন।
মেমক্যাশ স্টোর ডিফল্টভাবে ক্যাশ সার্ভার লোকালহোস্টে রান করছে বলে অনুমান করে, কিন্তু আপনি এক বা একাধিক রিমোট সার্ভারের অ্যাড্রেস পাস করতে পারেন।
config.cache_store = :mem_cache_store, "cache-1.example.com", "cache-2.example.com"
মেমক্যাশড ডিফল্টভাবে ৬৪ MB ম্যাক্সিমাম ক্যাশ সাইজ ব্যবহার করে কনফিগার করা থাকে, কিন্তু সেটি কমান্ড লাইন অপশন বা memcached.conf ফাইলে কনফিগার করা যায়। মেমরি স্টোরের মতো, ক্যাশ ম্যাক্সিমাম সাইজে পৌঁছালে সেটি লিস্ট রিসেন্টলি ইউজড আইটেম রিমুভ করা শুরু করে।
:mem_cache_store প্রোডাকশন এনভায়রনমেন্টের জন্য গো-টু ক্যাশ স্টোর। একটি সেন্ট্রাল মেমক্যাশড সার্ভার ব্যবহার করে, ক্যাশ একাধিক ওয়েব সার্ভারের মধ্যে শেয়ার করা যায় এবং এমনকি একাধিক হোস্টের ওপরও রিমোট মেমক্যাশড সার্ভার ব্যবহার করলে।
রেডিস ক্যাশ স্টোর
রেলস ৫.২ :redis_cache_store স্টোর ইন্ট্রোডিউস করেছিল, যা আপনাকে মেমক্যাশ স্টোরের মতো রেডিসে ক্যাশ এন্ট্রি স্টোর করতে দেয়।
রেডিসকে রেলস ক্যাশ স্টোর হিসেবে ব্যবহার করতে, একটি ডেডিকেটেড রেডিস ক্যাশ ব্যবহার করুন যেটি LRU (লেস্ট রিসেন্টলি ইউজড) ক্যাশ হিসেবে সেট আপ করা, আপনার এক্সিস্টিং রেডিস সার্ভারের দিকে পয়েন্ট করার বদলে, যাতে এন্ট্রিগুলো স্টোরে থেকে ড্রপ হয় যখন সেটি ম্যাক্সিমাম সাইজে পৌঁছায়।
রেডিস স্টোর রেডিস জেম (রেডিস::ডিস্ট্রিবিউটেড সহ) এবং হায়ার্ডিসের সাথে কাজ করে, সেইসাথে কনফিগারেশন অপশনের সংখ্যা সাপোর্ট করে, যেমন এক বা একাধিক রিমোট সার্ভার সেট করা।
cache_servers = %w[redis://cache-01:6379/0 redis://cache-02:6379/0]
config.cache_store = :redis_cache_store, { url: cache_servers }
রেডিস পেরিয়ডিক্যালি ডেটাসেট ডিস্কে লিখে, তাই আপনার অধিকাংশ ক্যাশড ডেটা ক্যাশ সার্ভার রিস্টার্ট হলে সার্ভাইভ করে। ডেভেলপমেন্টে, কনসোল ব্যবহার করে Rails.cache.delete দিয়ে ক্যাশড আইটেম রিমুভ করা যায়।
প্রোডাকশনে, রেডিস মেমক্যাশডের প্রতিদ্বন্দ্বী হিসেবে একটি সেন্ট্রালাইজড ক্যাশ স্টোর প্রদান করে। যদিও রেলস অ্যাপে এর ব্যবহার মেমক্যাশডের মতো ব্যাপক নয়, রেডিস স্টোর ভবিষ্যতে একটি জনপ্রিয় রেলস ক্যাশ স্টোর হতে পারে।
কোন ক্যাশ স্টোর ব্যবহার করবেন?
সাধারণভাবে, রেলসের ফাইল এবং মেমরি স্টোর ডেভেলপমেন্টের জন্য চমৎকার কিন্তু ছোট প্রোডাকশন অ্যাপ্লিকেশনে ব্যবহার করা যায় তাদের ক্যAVEATS বুঝে। প্রোডাকশন-গ্রেড মেমক্যাশড এবং রেডিস স্টোর সাধারণত বড় প্রোডাকশন অ্যাপের জন্য ভালো চয়েস, বিশেষ করে একাধিক ওয়েব সার্ভার একাধিক হোস্টে রান করলে।
এই আমাদের রেলসে ক্যাশ স্টোরের ওভারভিউ সমাপ্তি। আরও তথ্য এবং প্রতিটি স্টোরের কনফিগারেশন অপশনের জন্য রেলস গাইডের ক্যাশ স্টোর সেকশন চেক আউট করুন।
এই আর্টিকেল এবং অ্যাপসিগন্যাল একাডেমি সিরিজের আগের আর্টিকেলগুলো আপনাকে কেমন লাগলো? আমাদের ক্যাশিং নিয়ে আরও কিছু আর্টিকেল লাইন আপ করা আছে, কিন্তু দয়া করে আমাদের জানান আপনি কী সম্পর্কে লিখতে চান (ক্যাশিং-রিলেটেড বা অন্যথাও)!