Yii - कैशिंग
कैशिंग आपके एप्लिकेशन के प्रदर्शन को बेहतर बनाने का एक प्रभावी तरीका है। कैशिंग तंत्र कैश में स्थैतिक डेटा संग्रहीत करते हैं और अनुरोध किए जाने पर इसे कैश से प्राप्त करते हैं। सर्वर की ओर, आप मूल डेटा को संग्रहीत करने के लिए कैश का उपयोग कर सकते हैं, जैसे कि सबसे हालिया समाचारों की सूची। आप पेज के टुकड़े या पूरे वेब पेज भी स्टोर कर सकते हैं। क्लाइंट की तरफ, आप ब्राउज़र कैश में हाल ही में देखे गए पृष्ठों को रखने के लिए HTTP कैशिंग का उपयोग कर सकते हैं।
डीबी की तैयारी
Step 1- एक नया डेटाबेस बनाएँ। डेटाबेस को निम्नलिखित दो तरीकों से तैयार किया जा सकता है।
टर्मिनल में mysql -u root -p चलाएं
।CREAT DATABASE helloworld CHARACTER SET utf8 COLLATE utf8_general_ci के माध्यम से एक नया डेटाबेस बनाएं ;
Step 2 - में डेटाबेस कनेक्शन को कॉन्फ़िगर करें config/db.phpफ़ाइल। वर्तमान में उपयोग किए गए सिस्टम के लिए निम्न कॉन्फ़िगरेशन है।
<?php
return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=helloworld',
'username' => 'vladimir',
'password' => '12345',
'charset' => 'utf8',
];
?>
Step 3 - रूट फोल्डर के अंदर run ./yii migrate/create test_table। यह कमांड हमारे DB को प्रबंधित करने के लिए एक डेटाबेस माइग्रेशन बनाएगी। माइग्रेशन फ़ाइल में दिखाई देना चाहिएmigrations प्रोजेक्ट रूट का फ़ोल्डर।
Step 4 - माइग्रेशन फ़ाइल संशोधित करें (m160106_163154_test_table.php इस मामले में) इस तरह से।
<?php
use yii\db\Schema;
use yii\db\Migration;
class m160106_163154_test_table extends Migration {
public function safeUp()\ {
$this->createTable("user", [ "id" => Schema::TYPE_PK, "name" => Schema::TYPE_STRING, "email" => Schema::TYPE_STRING, ]); $this->batchInsert("user", ["name", "email"], [
["User1", "[email protected]"],
["User2", "[email protected]"],
["User3", "[email protected]"],
["User4", "[email protected]"],
["User5", "[email protected]"],
["User6", "[email protected]"],
["User7", "[email protected]"],
["User8", "[email protected]"],
["User9", "[email protected]"],
["User10", "[email protected]"],
["User11", "[email protected]"],
]);
}
public function safeDown() {
$this->dropTable('user');
}
}
?>
उपरोक्त प्रवासन एक बनाता है userइन फ़ील्ड्स के साथ तालिका: आईडी, नाम और ईमेल। यह कुछ डेमो उपयोगकर्ताओं को भी जोड़ता है।
Step 5 - प्रोजेक्ट रूट के अंदर run ./yii migrate डेटाबेस में माइग्रेशन लागू करने के लिए।
Step 6 - अब, हमें अपने लिए एक मॉडल बनाने की आवश्यकता है userतालिका। सादगी के लिए, हम उपयोग करने जा रहे हैंGiiकोड जनरेशन टूल। इसे खोलोurl: http://localhost:8080/index.php?r=gii। फिर, "मॉडल जनरेटर" हेडर के तहत "प्रारंभ" बटन पर क्लिक करें। तालिका नाम ("उपयोगकर्ता") और मॉडल वर्ग ("MyUser") भरें, "पूर्वावलोकन" बटन पर क्लिक करें और अंत में, "जनरेट" बटन पर क्लिक करें।
MyUser मॉडल को मॉडल निर्देशिका में दिखाई देना चाहिए।
डेटा कैशिंग
डेटा कैशिंग आपको PHP के चर को कैश में संग्रहीत करने में मदद करता है और बाद में उन्हें पुनः प्राप्त करता है। डेटा कैशिंग कैश घटकों पर निर्भर करता है, जो आमतौर पर एप्लिकेशन घटकों के रूप में पंजीकृत होते हैं। एप्लिकेशन घटक तक पहुंचने के लिए, आप कॉल कर सकते हैंYii::$app → cache। आप कई कैश एप्लिकेशन घटकों को पंजीकृत कर सकते हैं।
Yii निम्नलिखित कैश स्टोरेज का समर्थन करता है -
yii \ caching \ DbCache - कैश्ड डेटा को संग्रहीत करने के लिए डेटाबेस तालिका का उपयोग करता है। Uou को yii \ caching \ DbCache :: $ cacheTable में निर्दिष्ट तालिका बनाना होगा।
yii \ caching \ ApcCache - PHP APC एक्सटेंशन का उपयोग करता है।
yii \ caching \ FileCache - कैश्ड डेटा को संग्रहीत करने के लिए फ़ाइलों का उपयोग करता है।
yii \ caching \ DummyCache - एक कैश प्लेसहोल्डर के रूप में कार्य करता है जो कोई वास्तविक कैशिंग नहीं है। इस घटक का उद्देश्य उस कोड को सरल बनाना है जो कैश की उपलब्धता की जांच करने की आवश्यकता है।
yii \ caching \ MemCache - PHP मेमाशे एक्सटेंशन का उपयोग करता है।
yii \ caching \ WinCache - PHP WinCache एक्सटेंशन का उपयोग करता है।
yii \ redis \ Cache - Redis डेटाबेस के आधार पर कैश घटक को लागू करता है।
yii \ caching \ XCache - PHP XCache एक्सटेंशन का उपयोग करता है।
सभी कैश घटक निम्नलिखित एपीआई का समर्थन करते हैं -
get () - एक निर्दिष्ट कुंजी के साथ कैश से एक डेटा मान प्राप्त करता है। यदि डेटा मान समाप्त हो गया है या अमान्य है या नहीं मिला तो एक गलत मान लौटाया जाएगा।
add () - अगर कैश नहीं पाया जाता है तो कैश में कुंजी द्वारा पहचाने गए डेटा मूल्य को स्टोर करें।
सेट () - कैश में एक कुंजी द्वारा पहचाने गए डेटा मूल्य को संग्रहीत करता है।
मल्टीगेट () - निर्दिष्ट कुंजी के साथ कैश से कई डेटा मानों को प्राप्त करता है।
multiAdd () - कैश में कई डेटा मान संग्रहीत करता है। प्रत्येक आइटम को एक कुंजी द्वारा पहचाना जाता है। यदि कोई कुंजी कैश में पहले से मौजूद है, तो डेटा मान छोड़ दिया जाएगा।
मल्टीसेट () - कैश में कई डेटा वैल्यू स्टोर करता है। प्रत्येक आइटम को एक कुंजी द्वारा पहचाना जाता है।
मौजूद है () - यह दर्शाता है कि कैश में निर्दिष्ट कुंजी मिली है या नहीं।
फ्लश () - कैश से सभी डेटा मानों को निकालता है।
delete () - कैश से कुंजी द्वारा पहचाना गया डेटा मान निकालता है।
जब तक इसे हटाया नहीं जाता तब तक कैश में संग्रहीत डेटा मान हमेशा बना रहेगा। इस व्यवहार को बदलने के लिए, आप डेटा मान संग्रहीत करने के लिए सेट () विधि को कॉल करते समय एक समाप्ति पैरामीटर सेट कर सकते हैं।
कैश्ड डेटा मानों को परिवर्तनों के द्वारा भी अमान्य किया जा सकता है cache dependencies -
yii \ caching \ DbD dependency - निर्दिष्ट SQL कथन का क्वेरी परिणाम परिवर्तित होने पर निर्भरता बदल जाती है।
yii \ caching \ ChainedD dependency - यदि श्रृंखला पर निर्भरता में से कोई भी परिवर्तित किया जाता है तो निर्भरता बदल जाती है।
yii \ caching \ FileD निर्भरता - फ़ाइल के अंतिम संशोधन समय को बदल दिया जाए तो निर्भरता बदल जाती है।
yii \ caching \ ExpressionD dependency - निर्दिष्ट PHP अभिव्यक्ति के परिणाम को बदलने पर निर्भरता बदल जाती है।
अब, जोड़ें cache आपके आवेदन के लिए आवेदन घटक।
Step 1 - संशोधित करें config/web.php फ़ाइल।
<?php
$params = require(__DIR__ . '/params.php');
$config = [ 'id' => 'basic', 'basePath' => dirname(__DIR__), 'bootstrap' => ['log'], 'components' => [ 'request' => [ // !!! insert a secret key in the following (if it is empty) - this //is required by cookie validation 'cookieValidationKey' => 'ymoaYrebZHa8gURuolioHGlK8fLXCKjO', ], 'cache' => [ 'class' => 'yii\caching\FileCache', ], 'user' => [ 'identityClass' => 'app\models\User', 'enableAutoLogin' => true, ], 'errorHandler' => [ 'errorAction' => 'site/error', ], 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', // send all mails to a file by default. You have to set // 'useFileTransport' to false and configure a transport // for the mailer to send real emails. 'useFileTransport' => true, ], 'log' => [ 'traceLevel' => YII_DEBUG ? 3 : 0, 'targets' => [ [ 'class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning'], ], ], ], 'db' => require(__DIR__ . '/db.php'), ], 'modules' => [ 'hello' => [ 'class' => 'app\modules\hello\Hello', ], ], 'params' => $params,
];
if (YII_ENV_DEV) {
// configuration adjustments for 'dev' environment
$config['bootstrap'][] = 'debug'; $config['modules']['debug'] = [
'class' => 'yii\debug\Module',
];
$config['bootstrap'][] = 'gii'; $config['modules']['gii'] = [
'class' => 'yii\gii\Module',
];
}
return $config;
?>
Step 2 - नामक एक नया फ़ंक्शन जोड़ें actionTestCache() SiteController के लिए।
public function actionTestCache() {
$cache = Yii::$app->cache; // try retrieving $data from cache
$data = $cache->get("my_cached_data");
if ($data === false) { // $data is not found in cache, calculate it from scratch
$data = date("d.m.Y H:i:s"); // store $data in cache so that it can be retrieved next time
$cache->set("my_cached_data", $data, 30);
}
// $data is available here var_dump($data);
}
Step 3 - टाइप करें http://localhost:8080/index.php?r=site/test-cache वेब ब्राउज़र के एड्रेस बार में, आपको निम्नलिखित दिखाई देगा।
Step 4- यदि आप पृष्ठ को फिर से लोड करते हैं, तो आपको ध्यान देना चाहिए कि तारीख बदल नहीं गई है। दिनांक मान कैश किया गया है और कैश 30 सेकंड के भीतर समाप्त हो जाएगा। पृष्ठ को 30 सेकंड के बाद पुनः लोड करें।
क्वेरी कैशिंग
क्वेरी कैशिंग आपको डेटाबेस क्वेरी का परिणाम प्रदान करता है। क्वेरी कैशिंग के लिए DB कनेक्शन और कैश एप्लिकेशन घटक की आवश्यकता होती है।
Step 1 - नामक एक नई विधि जोड़ें actionQueryCaching() SiteController के लिए।
public function actionQueryCaching() {
$duration = 10; $result = MyUser::getDb()->cache(function ($db) { return MyUser::find()->count(); }, $duration);
var_dump($result); $user = new MyUser();
$user->name = "cached user name"; $user->email = "[email protected]";
$user->save();
echo "==========";
var_dump(MyUser::find()->count());
}
उपरोक्त कोड में, हम डेटाबेस क्वेरी को कैश करते हैं, एक नया उपयोगकर्ता जोड़ते हैं, और उपयोगकर्ता गणना प्रदर्शित करते हैं।
Step 2 - URL पर जाएं http://localhost:8080/index.php?r=site/query-caching और पेज पुनः लोड करें।
जब हम पृष्ठ को पहली बार खोलते हैं, तो हम DB क्वेरी को कैश करते हैं और सभी उपयोगकर्ताओं को प्रदर्शित करते हैं। जब हम पृष्ठ को पुनः लोड करते हैं, तो कैश्ड DB क्वेरी का परिणाम वैसा ही होता है जैसा कि डेटाबेस क्वेरी को कैश किया गया था।
आप निम्नलिखित आदेशों का उपयोग करके कंसोल से कैश को फ्लश कर सकते हैं -
yii cache - उपलब्ध कैश घटकों को दिखाता है।
yii cache/flush cache1 cache2 cache3 - कैश घटकों कैश 1, कैश 2 और कैश 3 को फ्लश करता है।
yii cache/flush-all - सभी कैश घटकों को फ्लश करता है।
Step 3 - आपके एप्लिकेशन रन के प्रोजेक्ट रूट के अंदर ./yii cache/flush-all।