PracticU

Cache object

בלי כתוביותעם כתוביות
PracticU › קורס ASP.NET › Cache object
מילון מושגים:
מטמון - אחסון זמני ומהיר של נתונים שנדרשים שוב, כדי להאיץ גישה ולהפחית עומס מהמקור המקורי.
אובייקט - יחידה בתכנות מונחה עצמים שמאגדת נתונים (תכונות) ופעולות (מתודות). נוצר בדרך כלל ממחלקה המשמשת כתבנית.
פרמטר - ערך שמועבר לפונקציה או לפקודה כקלט, ומשפיע על אופן פעולתן ועל התוצאה שהן מחזירות.
XML - שפת סימון לייצוג נתונים מובְנים בעזרת תגיות, המשמשת להחלפת מידע בין מערכות ולקובצי הגדרות.
תיקייה - מכל במערכת הקבצים שמשמש לארגון קבצים ותיקיות אחרות בתוך מבנה היררכי.
טבלה - מבנה במסד נתונים שמאחסן נתונים בשורות ועמודות. כל שורה היא רשומה וכל עמודה היא שדה.
זיכרון - רכיב מהיר ונדיף שבו המחשב שומר נתונים ותוכניות בזמן ריצתם. תוכנו נמחק עם כיבוי המחשב.
בקשה - פנייה שלקוח שולח לשרת כדי לקבל מידע או לבצע פעולה. השרת מחזיר עליה תגובה.

Cache object
Cache הוא אזור אחסון בצד השרת, בדומה ל-Application מבחינת הנגישות: כל הלקוחות רואים את הפריטים. ההבדל הגדול הוא השליטה. ב-Cache אפשר להגדיר מתי פריט יוצא אוטומטית, לתלות אותו בקובץ, ולקבל הודעה כשהוא יוצא.
הכנסה ושליפה
לאובייקט Cache נגשים כמו ל-Application: Cache["myColor"]. לפני שליפה בודקים שהערך אינו null, ואז ממירים לסוג הנכון.
פונקציית Insert והפרמטרים שלה
ב-Insert מעבירים את המפתח, את הערך ואת ארבעת הפרמטרים שקובעים מתי הפריט יצא:
1. CacheDependency: תלות בקובץ או במקור נתונים. כשהמקור משתנה, הפריט יוצא מה-Cache.
2. Absolute Expiration: שעה מדויקת, למשל חצות. בדמו נבנה תאריך של היום בשעה 23:59:59.
3. Sliding Expiration: מרווח זמן מהכנסת הפריט, למשל שלוש שעות. אי אפשר להשתמש בו יחד עם Absolute Expiration באותו Insert, ולכן אם משתמשים באחד, השני מוגדר כ-NoSlidingExpiration או NoAbsoluteExpiration.
4. Priority: קדימות לפריט (Low, Normal, High, NotRemovable). כשהזיכרון מלא, ASP.NET מוציאה קודם את הפריטים בעלי הקדימות הנמוכה.
הפרמטר האחרון הוא delegate, פונקציה שנקראת כשהפריט יוצא. בפונקציה מקבלים את המפתח, את הערך ואת הסיבה (CacheItemRemovedReason): DependencyChanged, Expired, Removed או Underused.
דוגמה: מחירון בקובץ XML
המרצה מכניס מחירון מקובץ XML שנמצא בתיקייה App_Data. הקובץ נטען ל-DataSet בעזרת ReadXml, ונכנס ל-Cache עם CacheDependency על הקובץ. כשמשנים את הקובץ, הפריט יוצא, ובהתחברות הבאה הוא נטען מחדש. בדמו נתפסת שגיאה כשנקראת MapPath מתוך פונקציה שאינה חלק מדף, והפתרון הוא להשתמש ב-HttpContext.Current.Server.MapPath. המרצה ממליץ להכניס את הפריט ל-Cache ב-Global.asax ולא בדף.
שימו לב
כאשר הדף קורא את הטבלה, הוא מחבר את ה-DataSet ל-GridView ומפעיל DataBind, ולכן הטבלה מוצגת מהזיכרון בכל בקשה.
בקצרה: ב-Application מוציאים פריט רק ידנית, ב-Cache אפשר להגדיר זמן, תלות וקדימות, ולהגדיר פונקציה שמחזירה את הפריט כשהוא יוצא.
השיעור הבא בקורס: Master Page

פרקי ההרצאה: Cache object

  1. 00:00

    האובייקט Cache

  2. 01:13

    שמירת מידע ב-Cache

  3. 02:18

    בדיקת null לפני טעינה

  4. 03:32

    זמינות ה-Cache לכל הגולשים

  5. 05:20

    ההבדל מ-Application

  6. 07:51

    הסרה אוטומטית של פריטים

  7. 08:34

    דוגמת מחירון ב-XML

תמלול ההרצאה: Cache object

הטקסט המלא של הדקות הראשונות בהרצאה «Cache object» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:01

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

  2. 00:25

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

  3. 00:42

    לחצן ראשון יכניס פריט לתוך ה-cash ולחצן שני יוציא את הפריט מה-cash. בשביל להגיע לאובייקט cache אני פשוט רושם את המילה cache אני מגיע ל-property שמכיל את האובייקט עצמו שמאפשר לשמור בתוכו מידע בצד השרת.

  4. 01:23

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

  5. 01:58

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

  6. 02:18

    ראשית, אני צריך לבדוק ממש כמו בסשן ובאפליקיישן האם באמת יש בתוכו ערך. אם אין בתוכו ערך, ערכו יהיה נ"ל, ולכן אני בודק האם הוא שונה מנהל.

  7. 02:37

    אם כן, אני יכול לשלוף את הערך. בואו נריץ את האפליקציה. כאשר אני לוחץ על ה-load בלי ללחוץ על ה-save, אני רואה שאין לי פריט במיקום MyColor שהגדרתי, או במופתח MyColor.

  8. 03:28

    כאשר אני לוחץ על ה-save אני מכניס את הפריט ל-cash, כאשר אני לוחץ על ה-load, עוד פעם, אני טוען אותו. cash מבחינת הזמינות שלו ללקוחות הוא מקביל ל-application.

  9. 04:13

    כלומר שמתם לב שסגרתי כרגע את הדפדפן אני עכשיו הולך להריץ עוד פעם את האתר שלנו כלומר אני לקוח חדש שגולש לאתר לא לוחץ על הסייב אלא לוחץ על הלואוד ואני רואה שהקאש עדיין מכיל את הפריט שהכנסתי אותו בגלישה הקודמת על ידי לקוח אחר לגמרי אוקיי אם אנחנו לוקחים וסוגרים את ה-iis

  10. 04:45

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

  11. 05:18

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

  12. 05:40

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

  13. 06:08

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

  14. 06:25

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

  15. 06:39

    אבל מה קרה למחירון הישן? אז אם דרסתי את אותו מחירון, אין שום בעיה, המחירון נמחק. אבל אם לא דרסתי את אותו מחירון, אז לא הוצאתי את המחירון הקודם מהאפליקיישן.

  16. 06:56

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

  17. 07:14

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

  18. 07:47

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

  19. 08:01

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

  20. 08:25

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

  21. 09:01

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

  22. 09:24

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

  23. 09:39

    אז אנחנו נשתמש ב-cash בשביל להראות את העיתונות של השימוש ב-cash מבחינת השליטה על הוצאת הפריטים. מה שנעשה כרגע זה לצרף את המחירון כקובץ XML. אז ראשית, נלך ונצרף תיקייה שתפקידה להחזיק פריטי מידע.

  24. 10:02

    ב-sp.net יש מספר תיקיות מאוד מאוד נפוצות ש-sp.net יודעת שהם משתמשים איתן בתדירות גבוהה ולכן התיקיות האלה מוגדרות אוטומטית בתפריט של-sp.net.

  25. 10:15

    התקייה שלנו נקראת app-data בתוכה אנחנו

לקורס המלא: קורס ASP.NET אונליין

ההרצאה הקודמת: Application object

ההרצאה הבאה: Master Page

הרצאות קשורות מקורסים אחרים

  • שימוש ב-Cache - חלק 1
  • שימוש ב-Cache ב-NodeJS
  • Object Serialization
  • המחלקה Object

קורסים נוספים במסלול

  • קורס Entity Framework Core - עבודה עם מסד נתונים בדוט-נט
  • קורס דוט-נט - NET Core. - עם Rest API
  • קורס MVC
  • קורס Git ו-GitHub עם Visual Studio