อธิบายรายละเอียดแต่ละแบบไว้

Redis caching strategies 5 แบบมีอะไรบ้าง?

  • Cache Aside
  • Read Through
  • Write Around
  • Write back (write behind)
  • Write through

Cache Aside

App จะทำการ read data จาก cache storage ก่อน ถ้าไม่เจอจะไป read จาก database แทน แล้วค่อยมา update กลับมาที่ cache storage ต่ออีกทีนึง

ข้อดี

  • ไม่เปลืองพื้นที่ เพราะเก็บเท่าที่จำเป็น
  • เราสามารถจัดการ data ใน cache storage ได้เองเลย

ข้อเสีย

  • เพิ่ม latency เพราะจะต้องวิ่งไปหา database อีกต่อ ถ้าไม่เจอ data ใน cache
  • เพิ่ม logic ในการ read/update data ใน app ของเรา

Read Through

กรณีที่ app เรามีการ write/update data ใน database ให้ทำการ sync data ที่จำเป็นต้องใช้ภายหลังไปที่ cache storage ด้วยแบบนี้เวลาที่มา app จะมา read data ก็ให้หยิบจาก cache storage ได้ที่เดียวเลย

ข้อดี

  • เรียบง่าย ไม่ซับซ้อน เพราะ read data จากที่เดียว
  • ประหยัดพื้นที่ เพราะเราจัดการ data ที่อยู่ใน cache storage ได้เองว่าจะเก็บอะไรบ้าง

ข้อเสีย

  • การเข้าถึงข้อมูลล่าสุดอาจจะล้าช้าได้ เพราะจะต้องรอให้ sync data ให้เสร็จก่อน
  • ปัญหาคอขวดจากการจัดการ cache ที่ไม่ดีพอ

Write Around

กรณีที่มีการ write data ลงใน database เราไม่ต้องไป update ที่ cache storage แต่จะทำการ update ก็ต่อเมื่อมีการ read data เท่านั้นจากภาพจะเห็นว่ามีการไป read data จากใน cache storage ก่อน จากนั้นค่อยไป read data จากใน database มา update ที่ cache storage อีกทีนึ่ง

ข้อดี

  • ลดความเสี่ยงเรื่องการ sync data จาก database ไป cache storage
  • ลดการหมุนเวียนขอ cache data ด้วยการหลีกเลี่ยงการ cache ข้อมูลที่มีการ read ไม่บ่อยนัก

ข้อเสีย

  • เนื่องจากจะต้องทำการ sync update จากตัว database ก่อน อาจจะทำให้การ read ข้อมูลหลังจากมีการ write data ไปแล้วเกิดความล่าช้าได้
  • อาจเพิ่มภาระของฐานข้อมูลเนื่องจากการเขียนทุกครั้งจะส่งตรงไปยังฐานข้อมูล

Write back (write behind)

วิธีนี้ app จะทำการ write data ไปที่ cache storage ก่อนจากนั้นค่อย sync data ไปที่ database ส่วนวิธีการก็อาจจะตั้ง batch job ค่อย sync ทุก ๆ 5 sec etc.

ข้อดี

  • Performance ตอนที่ write data ดีขึ้น เพราะว่า write operation จบลงที่ cache storage เลย
  • ลด load ของ database ลง เพราะมี batch job มาค่อย ๆ กวาด data ลงไปใน database แทน

ข้อเสีย

  • Data อาจจะหายได้ในกรณีที่ cache storage ล่ม
  • เพิ่ม complexity เพราะจะต้องแน่ใจว่า data ใน cache storage ได้ sync ไปที่ database แล้ว

Write through

วิธีนี้คล้าย ๆ กับวิธีก่อนหน้า (Write back) แต่จะต่างกันที่ตรงไม่ต้องใช้ batch job มาคอยกวาด data ไปที่ database แต่ให้ write ไปที่ database โดยตรงเลย

ข้อดี

  • การันตีเรื่อง data consistency เนื่องการ write data จาก cache storage ไป database เป็นแบบ synchronous
  • เข้าใจง่าย ทำก็ง่าย

ข้อเสีย

  • Write latency ที่สูงขึ้น เพราะว่าจะต้องทำการ write data ไปที่ cache storage แล้วก็ database ให้เสร็จก่อน