Cache, Session Store ต่างกันยังไงหนอ

Ponggun
T. T. Software Solution
3 min readJun 16, 2020

ในบทความนี้เราจะมาศึกษาความแตกต่างของ Cache กับ Session Store และแนวทางในการออกแบบ เพื่อนำมางานในระบบของเรากันนะครับ

ขอขอบคุณภาพจาก redislabs.com

เนื้อหาในบทความนี้อ้างอิงมาจากบทความของ 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
ขอขอบคุณภาพจาก redislabs.com

การทำงานของ 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)
ขอขอบคุณภาพจาก redislabs.com

การทำงานของ 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

ขอขอบคุณข้อมูลจาก redislabs.com

ศึกษาการใช้งานโครงสร้างของข้อมูลประเภทต่างๆเพิ่มเติมได้ที่ Redis Lab น่ะครับ

Redis สำหรับ Cache และ Session Store

Cache

Session Store

จบแล้วครับ หวังว่าเนื้อหาในบทความนี้จะช่วยให้ผู้อ่านเข้าใจความแตกต่างในการใช้งาน Cache และ Session Store กันมากขึ้นน่ะครับ ^^

ขอบคุณมากๆครับ

นายป้องกัลลล : P

--

--

Ponggun
T. T. Software Solution

Development Manager, Web Developer with ASP.Net, ASP.net Core, Azure and Microsoft Technologies