
Cache["myColor"]. לפני שליפה בודקים שהערך אינו null, ואז ממירים לסוג הנכון.NoSlidingExpiration או NoAbsoluteExpiration.CacheItemRemovedReason): DependencyChanged, Expired, Removed או Underused.ReadXml, ונכנס ל-Cache עם CacheDependency על הקובץ. כשמשנים את הקובץ, הפריט יוצא, ובהתחברות הבאה הוא נטען מחדש. בדמו נתפסת שגיאה כשנקראת MapPath מתוך פונקציה שאינה חלק מדף, והפתרון הוא להשתמש ב-HttpContext.Current.Server.MapPath. המרצה ממליץ להכניס את הפריט ל-Cache ב-Global.asax ולא בדף.DataBind, ולכן הטבלה מוצגת מהזיכרון בכל בקשה.הטקסט המלא של הדקות הראשונות בהרצאה «Cache object» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אוקיי, האובייקט האחרון שאנחנו הולכים לראות בנוגע לשמירת נתונים בצד השרת נקרא קאש. קאש משמעותו אזור אחסון שמיועד לשמור נתונים שהמחשב צריך אותם באופן מיידי או בזמן קצר, תוך זמן קצר.
והדוגמה שאנחנו הולכים לראות זו דוגמה שעוסקת באובייקט הזה שנקרא קאש. אז בואו נדגים ראשית דוגמה ממש פשוטה שמשתמשת בקאש.
לחצן ראשון יכניס פריט לתוך ה-cash ולחצן שני יוציא את הפריט מה-cash. בשביל להגיע לאובייקט cache אני פשוט רושם את המילה cache אני מגיע ל-property שמכיל את האובייקט עצמו שמאפשר לשמור בתוכו מידע בצד השרת.
כלומר cache מבחינת מיקום המידע שנשמר זה בדיוק כמו session וזה בדיוק כמו אפליקיישן. המידע שאני מכניס לתוכו נשמר בצד השרת. הכנסת המידע דומה לאפליקיישן. כלומר, אני לוקח איזשהו מפתח ופשוט מכניס לתוכו ערך.
ברגע שעשיתי את הדבר הזה, ממש כמו בסשן וכמו באפליקיישן, נוצר לי תא חדש שהמפתח שלו או השם שלו זה myColor והערך שלו זה color.blue. כרגע הכנסתי לתוכו פריט בשביל לטעון אותו מהקאש.
ראשית, אני צריך לבדוק ממש כמו בסשן ובאפליקיישן האם באמת יש בתוכו ערך. אם אין בתוכו ערך, ערכו יהיה נ"ל, ולכן אני בודק האם הוא שונה מנהל.
אם כן, אני יכול לשלוף את הערך. בואו נריץ את האפליקציה. כאשר אני לוחץ על ה-load בלי ללחוץ על ה-save, אני רואה שאין לי פריט במיקום MyColor שהגדרתי, או במופתח MyColor.
כאשר אני לוחץ על ה-save אני מכניס את הפריט ל-cash, כאשר אני לוחץ על ה-load, עוד פעם, אני טוען אותו. cash מבחינת הזמינות שלו ללקוחות הוא מקביל ל-application.
כלומר שמתם לב שסגרתי כרגע את הדפדפן אני עכשיו הולך להריץ עוד פעם את האתר שלנו כלומר אני לקוח חדש שגולש לאתר לא לוחץ על הסייב אלא לוחץ על הלואוד ואני רואה שהקאש עדיין מכיל את הפריט שהכנסתי אותו בגלישה הקודמת על ידי לקוח אחר לגמרי אוקיי אם אנחנו לוקחים וסוגרים את ה-iis
demo או asp development server הזה ומריצים שוב פעם אם אני לוחץ עכשיו על הלואוד, אין לי את הפריט. כלומר, בדיוק כמו באפליקיישן, הפריט נשמר ברמת האתר והוא נגיש לכל הגולשים.
אוקיי, אז מה באמת ההבדל בין קאש לבין אפליקיישן אם מהבחינה הזאת הוא אותו הדבר? בדיוק כמו אפליקיישן, הוא גם שומר את הנתונים בצד של השרת, ובדיוק כמו אפליקיישן כל מידע שהכנסתי לקאש נגיש על ידי כל הגולשים.
אז התשובה היא כזאת, באפליקיישן ישנה בעיה מבחינת נוחות עבודה. מה זה אומר? בוא נניח שאנחנו הולכים לאפליקיישן ומחליפים פרייס ליסט, כלומר איזושהי טבלה שמכילה מחירון או מחירונים.
הכנסתי את זה לאפליקיישן. למה לקחתי את טבלת המחירונים שכרגע האתר מציע למכירה והכנסתי לאפליקיישן? מפני שכל הגולשים צריכים לקבל את אותו מחירון.
אבל בעוד שבוע המחירון ישתנה לי, או בעוד יומיים המחירון ישתנה, ואני רוצה להכניס מחירון חדש. אז אין שום בעיה, אני יכול פשוט ללכת ולהכניס מחירון חדש.
אבל מה קרה למחירון הישן? אז אם דרסתי את אותו מחירון, אין שום בעיה, המחירון נמחק. אבל אם לא דרסתי את אותו מחירון, אז לא הוצאתי את המחירון הקודם מהאפליקיישן.
השירות היחידה שלי להוציא פריט מהאפליקיישן היא על ידי פונקציית רימוב. כלומר, הייתי צריך ללכת מתישהו לפונקציית רימוב ולהסיר את המחירון הקודם אם הוא לא רלוונטי, או להסיר כל מידע שהכנסתי לאפליקיישן.
וזה אומר שאני צריך לבצע פקודה יזומה ולדעת מתי ללכת ולהסיר את המידע מהאפליקיישן. הדבר הזה הוא קצת בעייתי מבחינת ASP.NET מפני שלא בטוח שאני רוצה שלקוח ילחץ על איזשהו לחצן ואז לקרוא לפונקציית רימוב, אלא יכול להיות שאני רוצה להסיר את המידע כל יום בחצות או פעם בשבוע, או שאני רוצה להסיר את המידע שלוש שעות אחרי
שהכנסתי את המידע לאפליקיישן, או שאני רוצה לרפרש בכל פרק זמן מסוים אם קובץ מסוים שונה, אין לי את האפשרויות האלה באפליקיישן.
זאת הסיבה שבנו קאש שהוא יותר נרחב מבחינת הפונקציונליות מאשר אפליקיישן. אז בואו נראה איך באמת אני יכול לעבוד עם ה-cash בכדי להכניס לתוכו פריטים ולבצע שליטה יותר טובה על מתי הפריטים שהכנסתי ל-cash יוצאים בצורה אוטומטית.
זה היתרון של ה-cash על פני אפליקיישן. אז בואו נסתכל. ניקח דף חדש שמציג מחירונים. בוא נגיד מחירון של ספרים.
אני רוצה עכשיו להציג טבלה שמכילה מחירון של ספרים. בגלל שהמחירון הזה תקף לכל הגולשים, וכל גולש הוא צריך לראות את אותו מחירון, אז אני רוצה לשמור את הטבלה הזאת באזור זיכרון שיהיה נגיש לכל הגולשים.
כמובן שאזור הזיכרון הזה לא יכול להיות סשן, כי סשן הוא ספציפית לגולש מסוים. כל גולש יש לו את הסשן שלו. אזור זיכרון כזה יכול להיות אפליקיישן, וכמובן יכול להיות גם קאש.
אז אנחנו נשתמש ב-cash בשביל להראות את העיתונות של השימוש ב-cash מבחינת השליטה על הוצאת הפריטים. מה שנעשה כרגע זה לצרף את המחירון כקובץ XML. אז ראשית, נלך ונצרף תיקייה שתפקידה להחזיק פריטי מידע.
ב-sp.net יש מספר תיקיות מאוד מאוד נפוצות ש-sp.net יודעת שהם משתמשים איתן בתדירות גבוהה ולכן התיקיות האלה מוגדרות אוטומטית בתפריט של-sp.net.
התקייה שלנו נקראת app-data בתוכה אנחנו