কাস্টম ক্যাশে ট্যাগ প্রয়োগ করা


14

আমি ডি 8-তে নতুন ক্যাশে ট্যাগিং ব্যবহার করতে চাই যাতে বিভিন্ন ধরণের (সত্তা, নোডস, ব্লকস, ইত্যাদি) সম্পর্কিত সামগ্রী সিঙ্কে রাখতে সহায়তা করে। তবে এই বৈশিষ্ট্যটির বর্তমানে উপলব্ধ নথিপত্র পড়ে আমি বুঝতে পারি না যে কীভাবে আমার নিজস্ব ক্যাশে ট্যাগটি সামগ্রীর আইটেমগুলিতে যুক্ত করতে / আপডেট করার সময় আইটেমগুলিতে যুক্ত করতে হয়।

উদাহরণস্বরূপ কোনও ধরণের স্টোরের একটি নতুন নোড তৈরি করার সময় আমি ক্যাশে ট্যাগ অবস্থান যুক্ত করতে চাই: new_york_123 এবং এএ ব্লকের জন্য একই same তারপরে আমি যদি নিউইয়র্ক 123 এর অবস্থানের নামটি সোহোতে পরিবর্তন করি তবে আমি ক্যাশে ট্যাগটি বাতিল করতে এবং সম্পর্কিত সমস্ত সামগ্রী আপডেট করতে পারি।


1
সমস্ত সত্তায় ইতিমধ্যে একটি ক্যাশে ট্যাগ রয়েছে (যেমন নোড: 123) যা স্বয়ংক্রিয়ভাবে অবৈধ। সুতরাং আপনি যদি কেবল নোডগুলি তৈরি / আপডেট করে এবং প্রদর্শন করেন তবে আপনার কিছু করার দরকার নেই, এটি কেবল কাজ করা উচিত।
বেরদির

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

আপনার অর্থ কী এবং আপনার কাঠামো কী তা আমি বুঝতে পারি না। ট্যাগগুলি ব্যবহার করার সময় যুক্ত করা হয়। ক্যাড ট্যাগগুলি কোনও ব্লকের মতো রেন্ডার উপাদানের সাথে যুক্ত করা উচিত যদি সেই নোড / জিনিসটি পরিবর্তন করা হয় তবে এটির পরিবর্তন হওয়া দরকার। আপনি যদি সত্তা প্রদর্শনের জন্য মানক প্রক্রিয়া ব্যবহার করেন তবে সম্ভবত এটি ইতিমধ্যে ঘটনা। যদি এটি কাজ না করে তবে কোড সহ আপনি আরও কীভাবে ঠিক করছেন তা ভাগ করে নেওয়া দরকার।
বারদির

ক্যাশে ট্যাগ ব্যবহারকারী: user আইডি that ব্যবহারকারীর সাথে সম্পর্কিত সমস্ত সামগ্রীর জন্য ক্যাশে সাফ ক্লিয়ার করতে অবৈধ হতে পারে। একই ধারণা, তবে কাস্টম ক্যাশে ট্যাগ সহ।
লিটল কোডিং

উত্তর:


13

কাস্টম ব্লকগুলির প্রসঙ্গে যা আমি চেষ্টা করেছি এবং কাজ করেছিলাম তার প্রসঙ্গে ক্যাশে ট্যাগগুলি কীভাবে ব্যবহার করতে হয় তা কিন্তু এখানে আমি মনে করি এটি অন্যান্য প্রসঙ্গে প্রযোজ্য

ডিফল্ট ড্রুপাল ট্যাগ ব্যবহার করুন

বিল্ড অ্যারেতে আপনি উল্লেখ করতে পারেন cache > tags > node_listএবং যখন কোনও কিছুই আপনার অংশে না করার পরিবর্তে কোনও কিছুই পরিবর্তন না করা হয় তখন এই ব্লক সামগ্রীটি অকার্যকর (রিফ্রেশ) হয়ে যায়

public function build() {
    return array(
        '#markup' => MY_MODULE_awesome_dynamic_node_content(),
        '#cache' => [
            'tags' => ['node_list'], //invalidate when any node updates
            //'tags' => ['node:1','term:2'], //invalidate when node 1 or term 2 updates
        ],
    );
}

বিকল্পভাবে আপনি উপরের কোড মন্তব্যে বর্ণিত নির্দিষ্ট নোড বা পদগুলিতে অ্যারে অবৈধ করতে এক বা একাধিক নোড / শব্দ / ব্যবহারকারী আইডি রাখতে পারেন। দ্রষ্টব্য: আপনি নোড, পদ, ব্যবহারকারীর এবং কাস্টম ট্যাগগুলি যথাযথ দেখতে মেশাতে এবং মেলাতে পারেন।

আপনার নিজের ট্যাগ ব্যবহার করুন

আপনি যদি নিজের বিল্ড অ্যারে সাফ করার নিজস্ব উপায়টি দেখতে চান তবে বিল্ড অ্যারেতে আপনার কাস্টম অনন্য ট্যাগ যুক্ত করুন (কোনও অনন্য স্ট্রিং এটি করবে)

public function build() {
    return array(
        '#markup' => MY_MODULE_awesome_dynamic_node_content(),
        '#cache' => [
            'tags' => ['MY_CUSTOM_UNIQUE_TAG'],
        ],
    );
}

এবং invalidateTagsআপনার নিজস্ব ট্যাগ সহ কাস্টম কোড লজিক কল

function MY_MODULE_custom_clear_cache_logic(){ 
    ...
    \Drupal\Core\Cache\Cache::invalidateTags(array('MY_CUSTOM_UNIQUE_TAG'));        

আপনি যদি ড্রুপাল 8 ক্যাশে ইন্টার্নাল সম্পর্কে আরও পড়তে চান


2
আমি মনে করি আদর্শভাবে আপনি cache_tags.invalidatorপরিষেবাটি সরাসরি কোনও শ্রেণীর রেফারেন্সের চেয়ে ব্যবহার করবেন ।
অ্যান্ডি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.