Cache, Session Store ต่างกันยังไงหนอ
ในบทความนี้เราจะมาศึกษาความแตกต่างของ Cache กับ Session Store และแนวทางในการออกแบบ เพื่อนำมางานในระบบของเรากันนะครับ
เนื้อหาในบทความนี้อ้างอิงมาจากบทความของ Redis Lab น่ะครับ
Cache
- จุดประสงค์ในการใช้งานคือ การช่วยให้ระบบเราแสดงข้อมูลได้เร็วขึ้น โดยการสำรองข้อมูลบางส่วนจาก Permanent Store (เช่น Database) มาที่ Cache ซึ่งมีความเร็วในการเข้าถึงข้อมูลที่มากกว่า ช่วยให้ระบบดึงข้อมูลในครั้งถัดไปได้เร็วขึ้นเมื่อดึงผ่าน Cache
- เป็นการจัดการกับข้อมูลในระดับ Application ไม่ใช่ระดับ User ดังนั้นข้อมูลจะถูกแชร์ให้กับผู้ใช้ทุกคน
- ข้อมูลใน Cache มีโอกาสหายได้ เพราะสามารถดึงจาก Permanent Store มาใหม่ได้
- ตัวอย่างข้อมูล เช่น ภาพ, วิดิโอ, Static HTML File , JavaScript File , Style Sheets File, ข้อมูลจังหวัด,อำเภอ, ตำบล ในประเทศไทย ที่ดึงจาก Database มาเก็บไว้ใน Cache, ข้อมูลโปรโมชั่นล่าสุด ที่ดึงจาก Database มาเก็บไว้ใน Cache
การทำงานของ Cache
- ระบบจะทำการค้นหาข้อมูลจาก Cache ถ้าเจอข้อมูลใน Cache (เราเรียกกรณีนี้ว่า Cache Hit) ระบบก็จะดึงข้อมูลใน Cache ไปใช้งานต่อทันที
- แต่ถ้าระบบไม่เจอข้อมูลใน Cache (เราเรียกกรณีนี้ว่า Cache Miss) ระบบจะไปดึงข้อมูลจาก Permanent Store และนำมาเก็บใน Cache เพื่อทำให้เกิด Cache Hit ในครั้งถัดไปที่มีการดึงข้อมูลนี้
- โอกาสที่เกิด Cache Hit มาก จะช่วยให้ข้อมูลแสดงผลได้เร็วขึ้นมากตามไปด้วยน่ะครับ
- เมื่อมีการแก้ไขข้อมูลใน Permanent Store ก็เป็นหน้าที่ของระบบที่ต้องทำการแก้ไขข้อมูลใน Cache ด้วยเช่นกันเพื่อให้ข้อมูลมีความแม่นยำและถูกต้องทั้งระบบ (Consistency)
Session Store
- จุดประสงค์เพื่อจัดเก็บข้อมูลที่เกี่ยวข้องกับผู้ใช้โดยตรงในระหว่างที่เข้าใข้งานระบบ
- เป็นการจัดการกับข้อมูลในระดับ User ไม่ใช่ระดับ Application ดังนั้นข้อมูลจะถูกใช้สำหรับผู้ใช้แต่ล่ะคนเท่านั้น ไม่สามารถนำ Session ไปแชร์ต่อให้กับผู้ใช้อื่นได้
- ข้อมูลใน Session Store ไม่สามารถหายได้เหมือน Cache จำเป็นต้องเก็บไว้จนกว่าผู้ใช้จะออกจากระบบ หรือเลิกใช้งาน เหตุผลก็เพื่อให้มั่นใจว่าการทำ Transaction ต่างๆในระบบจะไม่มีข้อมูลที่ผิดพลาดหรือสูญหายเกิดขึ้น
- ตัวอย่างข้อมูล เช่น ข้อมูลส่วนตัวของผู้ใช้ (ชื่อ, นามสกุล, อีเมล์, Login Account), รายละเอียดการตั้งค่าต่างๆในระบบของผู้ใช้ (Theme, Save Query, Page Setting)
การทำงานของ Session Store
- การทำงานจะเริ่มต้นเมื่อผู้ใช้เข้าสู่ระบบ
- ซึ่งระบบจะเริ่มเก็บข้อมูลที่เกี่ยวกับผู้ใช้ไว้ใน Session Store เช่น User Account, ชือ, นามสกุล
- ระบบจะเก็บ Session ไว้จนกระทั่งผู้ใช้ออกจากระบบ หรือ Session ที่สร้างไว้หมดอายุ
- การอ่านและเขียน Session จะทำที่ Session Store โดยตรง ไม่เหมือนกับ Cache ที่อ่านจาก Cache แต่ที่สามารถเขียนได้ทั้ง Cache และ Permanent Store
Redis คืออะไร
Redis เป็น Open Source (BSD licensed) NoSQL Database แบบ Key-Value
โดยเก็บข้อมูลลงใน Memory (RAM) ทำให้ทำงานได้รวดเร็วมากๆครับ (ตอนนี้เก็บลง Disk ได้ด้วยน่ะครับ ด้วย Redis Persistence)
Redis ช่วยในเรื่องของการทำ Cache, Session Store, Message Queue
โดยมาพร้อมกับ High Availability ที่จำเป็นสำหรับ Cache และ Durability (ความทนทาน) ที่จำเป็นสำหรับ Session Store
ข้อมูลที่จัดเก็บควรจะเป็นที่เก็บข้อมูลชั่วคราวเพื่อไม่ให้ใช้ปริมาณของ Memory ที่มากจนเกินไปนะครับ
ประเภทของข้อมูลใน Redis
Redis มีโครงสร้างของข้อมูล (Data Structure) ที่สามารถจัดเก็บได้อยู่หลากหลายรูปแบบขึ้นอยู่กับการใช้งานของเราน่ะครับ โดยจะประกอบไปด้วย Strings, Bitmaps, Bit field, Hashes, Lists,Sets, Sorted Sets, Geospatial Indexes, Hyperloglogs, Streams
ศึกษาการใช้งานโครงสร้างของข้อมูลประเภทต่างๆเพิ่มเติมได้ที่ Redis Lab น่ะครับ
Redis สำหรับ Cache และ Session Store
Cache
Session Store
ศึกษาเพิ่มเติม
จบแล้วครับ หวังว่าเนื้อหาในบทความนี้จะช่วยให้ผู้อ่านเข้าใจความแตกต่างในการใช้งาน Cache และ Session Store กันมากขึ้นน่ะครับ ^^
ขอบคุณมากๆครับ
นายป้องกัลลล : P