ক্যাশিং ধারণাটি কম্পিউটার বিজ্ঞানে একটি গুরুত্বপূর্ণ এবং ওয়েব অ্যাপ তৈরির ক্ষেত্রে সরাসরি প্রাসঙ্গিক। একটি উচ্চ স্তরে, ক্যাশিং এই সত্যটির সুবিধা নেয় যে মেমরি লুকআপগুলি ডাটাবেস প্রশ্নের চেয়ে দ্রুত এবং কম গণনা-নিবিড়। আপনার যদি একটি ডাটাবেস ক্যোয়ারী থাকে যা বারবার তৈরি হতে পারে, ফলাফলটিকে ক্যাশে ক্যাশে করা হলে তা কার্যকর করার প্রবাহকে গতি দেয়। রেল অ্যাপ্লিকেশনগুলিও এর ব্যতিক্রম নয় কারণ তারা প্রায়শই ডেটা ক্যাশে করতে এবং অ্যাপ্লিকেশন কার্যকারিতা উন্নত করতে রেডিসের মতো মেমরি-ভিত্তিক ক্যাশে ব্যবহার করে৷

একটি ডাটাবেস ক্যাশে ব্যবহার করার ধারণা অনুৎপাদনশীল শোনাতে পারে। তবুও, রেলে সলিড ক্যাশের মতো একটি ধীরগতির ডাটাবেস-ব্যাকড ক্যাশে ব্যবহার করে একটি অ্যাপ্লিকেশনের গতি বাড়াতে পারে কারণ সস্তা সঞ্চয়স্থান আমাদের দীর্ঘ সময়ের জন্য আরও জিনিস ক্যাশে করতে দেয়। Rails 7.1-এ, সলিড ক্যাশে চালু করা হয়েছিল, একটি ডাটাবেস-ব্যাকড অ্যাপ্লিকেশন ক্যাশে একটি রেল অ্যাপ্লিকেশনের জন্য একটি সুবিধাজনক বিকল্প তৈরি করে!
কিভাবে রেল ক্যাশে কাজ করে
রুবি অন রেলে ক্যাশিং অ্যাপ্লিকেশন কর্মক্ষমতা অপ্টিমাইজ করার একটি গুরুত্বপূর্ণ অংশ। কর্মক্ষমতা উন্নত করতে বিভিন্ন ধরনের ক্যাশিং ডেভেলপাররা ব্যবহার করতে পারেন:পৃষ্ঠা ক্যাশিং, অ্যাকশন ক্যাশিং, ফ্র্যাগমেন্ট ক্যাশিং, নিম্ন-স্তরের ক্যাশিং, SQL ক্যাশিং এবং আরও অনেক কিছু। এই নিবন্ধে, আমরা বেশিরভাগ নিম্ন-স্তরের ক্যাশিং নিয়ে আলোচনা করব, কারণ এটি সহজবোধ্য এবং কনফিগারযোগ্য cache_store এর সাথে সামঞ্জস্যপূর্ণ। .
ActiveSupport, রেল ফ্রেমওয়ার্কের একটি বিশাল অংশ, আমাদেরকে cache_store এর মাধ্যমে ক্যাশে ইন্টারঅ্যাক্ট করতে এবং কনফিগার করতে দেয় . config/environments/-এ , ক্যাশে_স্টোরের পছন্দ সহ বিভিন্ন কনফিগারেশনে প্রতিটি পরিবেশের নামের ফাইল রয়েছে।
একটি ক্যাশে_স্টোর মান সেট করা
Redis একটি অবিশ্বাস্যভাবে জনপ্রিয় ক্যাশ স্টোর এবং ব্যাপকভাবে শিল্প জুড়ে গৃহীত হয়েছে. যদি কোনো অ্যাপ্লিকেশন উৎপাদনে ক্যাশে করার জন্য Redis ব্যবহার করে, তাহলে আপনি config/environments/production.rb এ রুবির নিচের লাইনটি দেখতে পাবেন :
config.cache_store = :redis_cache_store
রেডিস ব্যবহার করা হয় কারণ এটি একটি মেমরি ক্যাশে, এবং মেমরিটি ঐতিহ্যগতভাবে ডিস্ক অ্যাক্সেস বা ডাটাবেস কোয়েরির চেয়ে অনেক দ্রুত পঠিত অ্যাক্সেসের সময় রয়েছে৷
রেলে একটি ডাটাবেস কোয়েরি ক্যাশ করা হচ্ছে
আপনি একটি ব্যয়বহুল ডাটাবেস কোয়েরির ফলাফল সঞ্চয় করতে নিম্ন-স্তরের ক্যাশিং ব্যবহার করতে পারেন যা এমন ডেটা ফেরত দেয় যা পরিবর্তন হয় না। এটি দেখতে এরকম কিছু হতে পারে:
Rails.cache.fetch("courses", expires_in: 12.hours) do
Courses.all
end
আপনি যদি রেডিসকে একটি ক্যাশে স্টোর হিসাবে ব্যবহার করেন, তাহলে এই কোডটি প্রথমে দেখতে পাবে যে গত 12 ঘন্টার কী "কোর্স" এর মান আছে কিনা। যদি এটি করে, তবে কোড ব্লক নির্বাহ না করেই এটি কেবল সেই মানটি ফিরিয়ে দেবে। ক্যাশে যদি সেই মান না থাকে, তাহলে একে "ক্যাশে মিস" বলা হয়। একটি ক্যাশে মিস করলে দোভাষী ব্লকটি কার্যকর করে, ফলাফলটি ক্যাশে সংরক্ষণ করে এবং তারপর ফলাফলটি ফেরত দেয়।
রেইলস সলিড ক্যাশে কি?
আমরা উপরে যে ক্যাশিং প্যাটার্নটি দিয়ে চলেছি তা পারফরম্যান্স সুবিধা প্রদান করে কারণ মেমরি অ্যাক্সেস দ্রুততর, উদাহরণস্বরূপ, API কল এবং ডাটাবেস কোয়েরি। যাইহোক, মেমরি ব্যয়বহুল , এবং তাই সীমিত। কারণ মেমরি সীমিত, আমাদের ক্যাশে কী এবং কতক্ষণ সংরক্ষণ করব তা কমিয়ে আনতে হবে। আপনি অনির্দিষ্ট সময়ের জন্য সবকিছু ক্যাশে করতে পারবেন না কারণ আপনি দ্রুত আপনার ক্যাশে মেমরি ফুরিয়ে যাবেন। ক্যাশিং থেকে পারফরম্যান্স সুবিধা সবই ট্রেডঅফ সম্পর্কে। আপনি কিছু সময়ের জন্য কিছু জিনিস ক্যাশে রাখেন যাতে আপনাকে সময়-নিবিড় কাজগুলি পুনরাবৃত্তি করতে না হয়।
Rails 7.1 রিলিজ সলিড ক্যাশে সহ এসেছে, ActiveRecord::Cache::Store-এর জন্য একটি বিকল্প যা ক্যাশে স্টোরের জন্য একটি SQL ডাটাবেস ব্যবহার করে। ক্যাশে থেকে প্রতিটি রিড ধীর, কিন্তু প্রযুক্তির অগ্রগতি এবং অনেক ডেটাবেসে বিল্ট-ইন মেমরি ক্যাশে উভয়ের জন্য ধন্যবাদ, পার্থক্যটি এখনও উপকারী৷
একটি ক্যাশে স্টোর হিসাবে একটি SQL ডাটাবেস ব্যবহার করা আপনাকে আরও কম খরচে অনেক গুণ বেশি সঞ্চয়স্থান দেয়, যা আপনার অ্যাপ্লিকেশনকে দীর্ঘ সময়ের জন্য আরও বেশি ডেটা ক্যাশ করার অনুমতি দেয়। বেসক্যাম্প টিম কীভাবে এটি তাদের আবেদনের গতি বাড়িয়েছে সে সম্পর্কে একটি নিবন্ধ লিখেছিল, যা বিপরীতমুখী বলে মনে হতে পারে।
আপনি কখন সলিড ক্যাশে ব্যবহার করবেন?
যদিও রেডিসের মতো মেমরি ক্যাশে সাধারণত ক্যাশে থেকে দ্রুত পঠন অফার করে, সলিড ক্যাশে বিভিন্ন পরিস্থিতিতে এই বিকল্পগুলির একটি ভাল বিকল্প উপস্থাপন করে৷
যদি আপনার অ্যাপ্লিকেশনের জন্য প্রচুর পরিমাণে ডেটা ক্যাশ করার প্রয়োজন হয়, তবে এটি মেমরিতে সংরক্ষণ করা নিষেধজনকভাবে ব্যয়বহুল হতে পারে। সলিড ক্যাশে খরচের একটি ভগ্নাংশে অনেক বড় ক্যাশে আকারের জন্য অনুমতি দেয়।
যদি আপনার অ্যাপ্লিকেশনটি যোগ করা ক্যাশে পুনরুদ্ধার সময়ের কয়েক মিলিসেকেন্ডের জন্য অত্যন্ত সংবেদনশীল না হয়, তবে সলিড ক্যাশে কর্মক্ষমতা এবং খরচের মধ্যে একটি চমৎকার ভারসাম্য প্রদান করে। আপনি যদি বিলম্বের সম্ভাব্য বৃদ্ধিকে পেট করতে পারেন, সলিড ক্যাশে একটি ভাল সমাধান৷
আলাদাভাবে, সেটআপগুলিতে যেখানে একটি পৃথক রেডিস ইনস্ট্যান্স পরিচালনা করা অবাস্তব, সলিড ক্যাশে রেডিস সমর্থন করার প্রয়োজন ছাড়াই আপনার বিদ্যমান ডাটাবেস দ্বারা ক্যাশে পরিচালনা করার অনুমতি দিয়ে স্থাপনাকে সহজ করে তোলে।
সলিড ক্যাশে ইনস্টলেশন
সলিড ক্যাশে রিডমে এটিকে একটি রেল অ্যাপ্লিকেশনে প্রবর্তন করার জন্য সহায়ক নির্দেশাবলী রয়েছে। প্রথমে, আপনার জেমফাইলে রত্নটি যোগ করুন:
gem "solid_cache"
এর পরে, এটি Bundler দিয়ে ইনস্টল করুন:
bundle install
এরপরে, একটি মাইগ্রেশন যোগ করুন যাতে আপনার ডাটাবেস সলিড ক্যাশের সাথে কাজ করবে। নিম্নলিখিত চালান:
bin/rails solid_cache:install:migrations
অবশেষে, তৈরি করা মাইগ্রেশন চালান:
bin/rails db:migrate
একটি রেল অ্যাপে সলিড ক্যাশে প্রয়োগ করা
বিদ্যমান ক্যাশের জন্য সলিড ক্যাশে অদলবদল করা সাধারণত সোজা। আপনার পরিবেশ কনফিগারেশনে, যেমন config/environments/production.rb , cache_store পরিবর্তন করুন নিম্নলিখিত সেটিং:
config.cache_store = :solid_cache_store
আপনার ক্যাশে স্টোর হিসাবে সলিড ক্যাশে ব্যবহার শুরু করার জন্য এটিই প্রয়োজন! এটি অন্য সব ActiveSupport::Cache::Store সমর্থন করে কনফিগারেশন বিকল্প, সেইসাথে ডাটাবেস শর্ডিং বা অন্যান্য অনন্য প্রয়োজন সমর্থন করার জন্য অতিরিক্ত বিকল্প।
আপনার মনে রাখা উচিত যে এটি শুধুমাত্র উৎপাদনে ক্যাশে স্টোরকে পরিবর্তন করে, তাই আপনি যদি অন্য পরিবেশে পরীক্ষা করছেন, আপনি সেখানেও মান পরিবর্তন করতে চাইবেন।
আপনি কি রেলের সলিড ক্যাশে স্যুইচ করবেন?
রেল 7.1-এ সলিড ক্যাশের প্রবর্তন রেল ক্যাশিং কৌশলগুলির বিশ্বে একটি উল্লেখযোগ্য উন্নয়ন চিহ্নিত করেছে। এই সমাধানটি অ্যাপ্লিকেশন কর্মক্ষমতা অপ্টিমাইজেশানের উপর একটি নতুন দৃষ্টিভঙ্গি অফার করে, রেডিসের মতো মেমরি-ভিত্তিক ক্যাশেগুলির জন্য ঐতিহ্যগত পছন্দকে চ্যালেঞ্জ করে৷
ক্যাশে করার জন্য একটি SQL ডাটাবেস ব্যবহার করে, সলিড ক্যাশে অ্যাপ্লিকেশনগুলিকে বর্ধিত সময়ের জন্য অধিক পরিমাণে ডেটা সঞ্চয় করতে সক্ষম করে, যার ফলে মেমরি স্টোরেজের খরচ এবং ক্ষমতা দ্বারা আরোপিত সীমাবদ্ধতাগুলি অতিক্রম করে। এই পদ্ধতিটি কেবল কার্যকরভাবে ক্যাশে করা যেতে পারে তার পরিমাণকে প্রসারিত করে না বরং আরও বেশি কর্মক্ষমতা সুবিধা প্রদান করার সম্ভাবনাও রয়েছে৷
এটি বলেছে, স্যুইচ করার সিদ্ধান্ত আপনার আবেদনের নির্দিষ্ট চাহিদার উপর নির্ভর করে। যদি আপনার অ্যাপ্লিকেশন উচ্চ-গতির ক্যাশিং থেকে উল্লেখযোগ্যভাবে উপকৃত হয় এবং আপনার কাছে Redis সমর্থন করার জন্য পরিকাঠামো থাকে, তাহলে আপনার সলিড ক্যাশের প্রয়োজন নাও হতে পারে। যাইহোক, আপনি যদি আপনার স্ট্যাকে অন্য পরিষেবা যোগ না করে প্রচুর পরিমাণে ডেটা ক্যাশ করার জন্য একটি সাশ্রয়ী-কার্যকর উপায় খুঁজছেন, তাহলে সলিড ক্যাশে অন্বেষণের মূল্য হতে পারে। এমনকি আপনি যদি রেডিস সমর্থন করা এড়াতে চান তবে সলিড ক্যাশে আপনার অ্যাপের জন্য যথেষ্ট ভাল হতে পারে।
আপনি যদি এই নিবন্ধটি উপভোগ করেন, আপনার ইনবক্সে এই ধরনের আরও রুবি এবং রেল নিবন্ধ পেতে Honeybadger নিউজলেটারে সাইন আপ করুন৷