שמירת נתונים

שמירת נתונים במטמון היא דרך לשמירת משתנה PHP במטמון וקבלתו בזמן מאוחר יותר. למטרה זו, המחלקה הבסיסית של המטמון CCache מספקת שני מתודות עם השימוש הנפוץ ביותר: set ו get.

כדי לשמור את המשתנה value$ במטמון, אנו בוחרים מזהה יחודי כלשהו וקוראים למתודה set כדי לשמור אותה:

Yii::app()cacheset($id, $value);

התוכן הנשמר יאוחסן במטמון לעד אלה אם כן הוא ימחק מסיבות שאינן תלויות באפליקציה (לדוגמא, מקום האחסון של המטמון מלא והפריטים הישנים ביותר שנשמרו ימחקו). כדי לשנות התנהגות זו, אנו יכולים להוסיף פרמטר שלישי אשר יגדיר את תפוקת הנתונים אותם אנו שומרים בזמן קריאה ל set כדי שהתוכן שנשמר במטמון ימחק אחרי פרק זמן מסויים:

// keep the value in cache for at most 30 seconds
Yii::app()cacheset($id, $value, 30);

בזמן מאוחר יותר כשאנו צריכים לגשת למשתנה זה (בבקשה הנוכחית או אחרת), אנו קוראים למתודה א עם אותו מזהה יחודי בו שמרנו את הנתונים כדי לקבל אותם מהמטמון. אם הערך שהתקבל מהקריאה שווה ל false, זה אומר שהנתון לא נמצא במטמון ועלינו ליצור אותו שוב פעם.

$value=Yii::app()cacheget($id);
if($value===false)
{
    // regenerate $value because it is not found in cache
    // and save it in cache for later use:
    // Yii::app()-»cache-»set($id,$value);
}

‎כשבוחרים מזהה יחודי בתור השם של המטמון אותו שומרים, וודא שאותו שם הוא יחודי בקרב כל שאר המשתנים הניתנים לשמירה במטמון באפליקציה. אין צורך שהשם יהיה יחודי בין אפליקציות שונות מאחר ורכיב זה מספיק חכם כדי להבדיל בין האפליקציות בהם הוא רץ.

חלק מאפשרויות האחסון, כמו MemCache, APC, תומכים באפשרות של קבלת כמה נתונים מהמטמון בקריאה אחת כקבוצה, פעולה זו חוסכת בזמן הלקוח לקבלת נתון מהמטמון. מגרסא 1.0.8, ישנה מתודה חדשה בשם mget כדי ליישם אפשרות זו. במידה ורכיב האחסון בו משתמשים לא תומך באפשרות זו כברירת מחדל, האפליקציה תחקה את הפעולה שהמתודה mget מבצעת.

כדי למחוק נתון מהמטמון, יש לקרוא למתודה delete; ובכדי להוריד את כל הנתונים מהמטמון יש לקרוא למתודה flush. יש להזהר בעת השימוש במתודה flush מאחר והיא מוחקת נתונים במטמון מאפליקציות אחרות.

» Tip|טיפ: מאחר והמחלקה CCache מיישמת את הממשק ArrayAccess, ניתן להשתמש במטמון בתור מערך. להלן כמה דוגמאות: » ~~~ » [php] » $cache=Yii::app()-»cache; » $cache['var1']=$value1; // equivalent to: $cache-»set('var1',$value1); » $value2=$cache['var2']; // equivalent to: $value2=$cache-»get('var2'); » ~~~

1. הגדרת תלות למטמון

מלבד הגדרת זמן קיום המטמון, ניתן להגדיר תלות מסויימת לנתונים הנשמרים במטמון כדי לבטל את אותם נתונים שנשמרו. לדוגמא, אם אנו שומרים תוכן של קובץ מסויים במטמון והקובץ ההוא השתנה, אנו צריכים לבטל את הנתון השמור במטמון ולשמור את תוכן הקובץ במטמון שוב פעם.

אנו מייצגים תלות באובייקט של CCacheDependency או מחלקות היורשות ממנו. אנו קוראים לתלות מסויימת בזמן קריאה למתודה set והגדרתו כפרמטר רבעי.

// the value will expire in 30 seconds
// it may also be invalidated earlier if the dependent file is changed
Yii::app()cacheset($id, $value, 30, new CFileCacheDependency('FileName'));

כעת, אם נשלוף את המשתנה value$ מתוך המטמון על ידי קריאה למתודה get, התלות תכנס לפעולה ובמידה והקובץ השתנה, אנו נקבל ערך השווה ל false, האומר שצריך ליצור מחדש את התוכן השמור במטמון.

למטה רשומים בקצרה התלויות הקיימות למטמון:

  • CFileCacheDependency: התלות משתנה אם הזמן האחרון בו הקובץ נערך השתנה.

  • CDirectoryCacheDependency: התלות משתנה אם ישנו שינוי בכל אחד מהקבצים הנמצאים בתיקיה ותתי-תיקיות.

  • CDbCacheDependency: התלות משתנה במידה והתוצאה של השאילתה השתנתה.

  • CGlobalStateCacheDependency: התלות משתנה במידה והערך הגלובלי שהוזן השתנה. משתנה גלובלי באפליקציה הינו משתנה אשר קיים לאורך כל האפליקציה. הוא מוגדר על ידי CApplication::setGlobalState.

  • CChainedCacheDependency: התלות משתנה במידה וכל אחד מהתלויות המשורשרות משתנה.

  • CExpressionDependency: התלות משתנה במידה והתוצאה של ביטוי ה PHP היא שונה. מחלקה זו קיימת מגרסאות 1.0.4 ומעלה.

«div class="revision"»$Id: caching.data.txt 1855 2010-03-04 22:42:32Z qiang.xue $«/div»

Be the first person to leave a comment

Please to leave your comment.