আমি কীভাবে db_query () এর ফলাফলকে ক্যাশে করব?


9

আমি views_get_view_result()কোনও ভিউ থেকে ফলাফল পেতে পারি কারণ এটি তখন সুবিধাজনক ছিল। প্রশ্নের ফলাফল খুব কমই পরিবর্তিত হয়; আমি 6 দিনের জন্য ভিউ ক্যাচিং ব্যবহার করতে পারি।

আমি যদি এটিকে কোনও কলে রূপান্তর db_query()করতে চাই তবে কীভাবে আমি ক্যাশে সক্ষম করতে পারি?

উত্তর:


9

আপনি ভিউ বা ডিবি_উইউরি () ব্যবহার করেন তবে ক্যাশে করার জন্য ম্যাটার নয়। ক্যাশে সর্বদা একই কাজ করে, যখন ক্যাশেটি মিস হয় তখন ডেটা কীভাবে আনা হয়।

  1. আপনার ক্যাশে এন্ট্রি সনাক্ত করতে একটি ক্যাশে আইডি তৈরি করুন। একটি সহজ, হার্ডকোডযুক্ত স্ট্রিং বা আর্গুমেন্ট ইত্যাদির উপর ভিত্তি করে জটিল কিছু হতে পারে।
  2. ক্যাশে থেকে লোড করা যায় কিনা তা পরীক্ষা করুন।
  3. যদি তা না হয় তবে ডেটা পুনর্নির্মাণ করুন এবং কাঙ্ক্ষিত মেয়াদোত্তীর্ণ সময়ের সাথে ক্যাশে রাখুন।

কিছু উদাহরণ দেখতে, আপনি ফাংশনগুলি দেখতে পারেন যা ক্যাশে_জেট () ব্যবহার করে , উদাহরণস্বরূপ ভেরিয়েবল_আইনাইটালাইজ ()

যদি আপনার ফাংশনটিকে একাধিকবার বলা হয় তবে আপনি সম্ভবত এটি একটি স্ট্যাটিক ক্যাশের সাথে সংযুক্ত করতে চান, উদাহরণস্বরূপ দেখুন archiver_get_info () । এবং যদি ডেটা পুনর্নির্মাণটি সত্যই ধীর হয় তবে আপনি লকিং ফ্রেমওয়ার্কটি ভেরিয়েবল_আইনাইটালাইজ () হিসাবে ব্যবহার করে একাধিকবার ঘটতে বাধা দিতে পারেন।

নোট করুন যে একটি একক ক্যোয়ারী ক্যাশে করা কেবল তখনই তা বোধগম্য হয় যদি এটি ধীর হয়, কারণ আপনি মেমক্যাসের মতো বিকল্প ক্যাশে ব্যাকএন্ড ব্যবহার না করা হলে ক্যাশে () একটি ডিবি কোয়েরিও হয়।

এবং শেষ অবধি, ভিউজে ইতিমধ্যে অন্তর্নির্মিত ক্যাশে রয়েছে এবং আপনার দৃষ্টিতে কনফিগার করা যেতে পারে। সুতরাং যে পাশাপাশি একটি বিকল্প হতে পারে।


আমাকে এতে মারধর করুন;) আমি আমার উত্তরটি কোডের উদাহরণ হিসাবে রেখে দেব তবে এটি আরও দরকারী তথ্য
ক্লাইভ

আমি ভেবেছিলাম পিডিও উদাহরণগুলি সিরিয়ালযোগ্য ছিল না?
এমপিডোনাদিও

1
না, তারা না, তবে এটি প্রাসঙ্গিক নয়। আপনি পিডো ফলাফলের সংস্থানটি ক্যাশে করবেন না, আপনি সেই ক্যোয়ারী থেকে প্রকৃতপক্ষে যে কোনও ডেটা স্ট্রাকচার আনবেন তা ক্যাশে করুন।
বারদির

আমি বলব এটি অত্যন্ত প্রাসঙ্গিক। @ মোটোট্রিইব কাছ থেকে ক্যাশিংয়ের ফলাফল সম্পর্কে জিজ্ঞাসা করছিল db_query(), এবং এটির কাজটি করার মূল বিষয়টি থেকে মূল্যটি ক্যাশ করা $results->fetchAll()এবং না $resultsহওয়া উচিত।
এমপিডোনাদিও

7

আমি মনে করি না ক্যাচিং ব্যবস্থাপনায় ডিবি স্তরটির কোনও অন্তর্নির্মিত ব্যবস্থা রয়েছে (যদিও আমি ভুল হতে পারি) তবে আপনি ডিফল্ট ক্যাশে API ব্যবহার করতে পারেন could

এটি কেবলমাত্র একটি প্রাথমিক উদাহরণ যা কোনও নির্দিষ্ট ধরণের নোড পেতে কোনও প্রশ্নের ফলাফলকে ক্যাশে করবে:

function MYMODULE_get_nodes_by_type($type) {
  // Setup a cache ID
  $cid = 'MYMODULE:node_types:' . $type;

  // If a cached entry exists, return it
  if ($cached = cache_get($cid)) {
    return $cached->data;
  }

  // Otherwise load the data
  $data = db_query('SELECT * FROM {node} WHERE type = :type', array(':type' => $type))->fetchAll();

  // And cache it
  cache_set($cid, $data, 'cache', strtotime('+6 days'));
}

3

ড্রুপাল সরবরাহ করে এমন স্ট্যান্ডার্ড ক্যাশে_সেট / ক্যাশে_জেট প্রক্রিয়াটি ছাড়াও , যদি আপনি মাইএসকিউএলকে আপনার ডাটাবেস হিসাবে ব্যবহার করেন তবে আপনি ক্যোয়ারী ক্যাশে সক্ষম করতে পারবেন , যা দৃশ্যের ফলাফলগুলি বা অন্য কোনও ডাটাবেস অনুসন্ধানগুলি স্বচ্ছভাবে ক্যাশে করতে পারে। মাইএসকিএলটিউনার ক্যাশে আকারের জন্য ভাল মানগুলি খুঁজে পেতে সহায়তা করতে পারে।

কেবলমাত্র নোট করুন যে আপনি যদি ডাটাবেসটিতে প্রচুর লেখালেখি করে থাকেন তবে ক্যাশে অবৈধকরণ কৌশলটি যেভাবে কাজ করে (কোনও টেবিলের কাছে লেখাটি সেই সারণী থেকে নির্বাচন করুন বা সেই সারণিতে যোগদান করুন) এমন সমস্ত প্রবেশপথকে অকার্যকর করে দেয় কারণ কোয়েরি ক্যাচিং কম কার্যকর হয়।

পোস্টগ্রেএসকিউএল-এর জন্য একটি ক্যাশেিং ব্যবস্থা রয়েছে , তবে এটির সাথে আমার সরাসরি অভিজ্ঞতা নেই।


3

আমি সম্প্রতি ক্যাশে অ্যাকশন মডিউলটি আবিষ্কার করেছি । এই মডিউলটির সাহায্যে আপনি আপনার ভিউ ক্যাশেটিকে নিয়ম-ট্রিগারযুক্ত ক্যাশে সেট করতে পারেন এবং নির্দিষ্ট দর্শন এবং দর্শন প্রদর্শনগুলিতে ক্যাশে অবৈধ করার জন্য একটি নিয়ম তৈরি করতে পারেন।

উদাহরণস্বরূপ, একটি নির্দিষ্ট সামগ্রীর প্রকারের নোডের তালিকা দেখার জন্য ক্যাশেটি খালি করা যেতে পারে যখন সেই সামগ্রী ধরণের একটি নতুন নোড তৈরি হয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.