メインコンテンツへ移動

เนื้อหาภาษาไทย / タイ語のコンテンツ

システムガイド 内容確認済み

Redis Cache คืออะไร? ทำไมถึงสำคัญต่อแอปพลิเคชัน

บทความนี้อธิบายถึงความสำคัญของ Cache ในการเพิ่มประสิทธิภาพแอปพลิเคชัน และแนะนำ Redis ซึ่งเป็น In-Memory Data Structure Store ที่นิยมใช้เป็น Cache Server เนื่องจ...

Redis Cache คืออะไร? ทำไมถึงสำคัญต่อแอปพลิเคชัน

ในโลกของการพัฒนาเว็บแอปพลิเคชัน ประสิทธิภาพและความเร็วในการตอบสนองเป็นสิ่งสำคัญอย่างยิ่ง ผู้ใช้งานคาดหวังว่าจะได้รับประสบการณ์ที่ราบรื่นและรวดเร็ว หากแอปพลิเคชันของคุณโหลดช้าหรือตอบสนองช้า อาจส่งผลเสียต่อความพึงพอใจของผู้ใช้งานและอาจทำให้เสียโอกาสทางธุรกิจได้

หนึ่งในเทคนิคที่สำคัญในการเพิ่มประสิทธิภาพของแอปพลิเคชันคือการใช้ Cache และ Redis ก็เป็นเครื่องมือที่ได้รับความนิยมอย่างมากในการทำ Cache

Cache คืออะไร?

Cache คือกลไกในการจัดเก็บสำเนาของข้อมูลที่ถูกเข้าถึงบ่อยๆ ไว้ในตำแหน่งที่เข้าถึงได้รวดเร็วกว่าแหล่งข้อมูลหลัก เมื่อแอปพลิเคชันต้องการข้อมูล แทนที่จะไปดึงข้อมูลจากแหล่งข้อมูลหลัก (เช่น ฐานข้อมูล) ก็จะตรวจสอบใน Cache ก่อน ถ้าพบข้อมูลที่ต้องการใน Cache (Cache Hit) ก็จะนำข้อมูลนั้นมาใช้ได้เลย ทำให้ลดเวลาในการเข้าถึงข้อมูลและลดภาระของแหล่งข้อมูลหลัก

ลองนึกภาพว่าคุณต้องการค้นหาคำศัพท์ในพจนานุกรม ถ้าคุณต้องพลิกหน้าพจนานุกรมทุกครั้งที่ต้องการค้นหาคำศัพท์ใหม่ จะเสียเวลามาก แต่ถ้าคุณจดคำศัพท์ที่คุณค้นหาบ่อยๆ ไว้ในสมุดโน้ตเล่มเล็กๆ คุณก็จะสามารถค้นหาคำศัพท์เหล่านั้นได้อย่างรวดเร็ว นี่คือหลักการทำงานของ Cache

มี Cache หลายประเภทที่สามารถนำมาใช้ในแอปพลิเคชันได้ เช่น:

  • Browser Cache: จัดเก็บไฟล์ static เช่น รูปภาพ, CSS, JavaScript ไว้ใน Browser ของผู้ใช้งาน เพื่อลดการดาวน์โหลดไฟล์ซ้ำ
  • Server-side Cache: จัดเก็บข้อมูลที่ถูกประมวลผลแล้วไว้ใน Server เพื่อลดการประมวลผลซ้ำ
  • Database Cache: จัดเก็บผลลัพธ์ของการ query ฐานข้อมูลไว้ใน Cache เพื่อลดการ query ฐานข้อมูลซ้ำ

Redis คืออะไร?

Redis (Remote Dictionary Server) คือ In-Memory Data Structure Store ที่สามารถใช้เป็นฐานข้อมูล, Cache, message broker และ stream engine ได้ Redis เป็น Open Source และมีประสิทธิภาพสูงมาก เนื่องจากข้อมูลถูกจัดเก็บไว้ในหน่วยความจำ (RAM) ทำให้การเข้าถึงข้อมูลรวดเร็วกว่าการเข้าถึงข้อมูลจาก Disk (เช่น ในฐานข้อมูลแบบดั้งเดิม)

Redis รองรับ data structure ที่หลากหลาย เช่น:

  • Strings: ข้อความทั่วไป
  • Hashes: คล้ายกับ associative array หรือ dictionary
  • Lists: คล้ายกับ array ที่สามารถเพิ่มและลบข้อมูลจากหัวและท้าย List ได้
  • Sets: คล้ายกับ array ที่ไม่มีข้อมูลซ้ำ
  • Sorted Sets: คล้ายกับ Set แต่ข้อมูลถูกเรียงลำดับตาม Score

ความยืดหยุ่นของ data structure เหล่านี้ทำให้ Redis เหมาะสมกับการใช้งานที่หลากหลาย นอกเหนือจากการเป็น Cache Server

ข้อดีของการใช้ Redis Cache

การใช้ Redis Cache มีข้อดีมากมาย ดังนี้:

  • ประสิทธิภาพสูง: เนื่องจาก Redis ทำงานในหน่วยความจำ การเข้าถึงข้อมูลจึงรวดเร็วกว่าการเข้าถึงข้อมูลจาก Disk มาก ทำให้แอปพลิเคชันตอบสนองได้รวดเร็วขึ้น
  • ลดภาระของฐานข้อมูล: เมื่อข้อมูลถูก Cache ไว้ใน Redis แอปพลิเคชันจะไม่ต้อง query ฐานข้อมูลบ่อยๆ ทำให้ลดภาระของฐานข้อมูลและเพิ่ม scalability
  • Scalability: Redis สามารถ Scale ได้ทั้งในแนวตั้ง (เพิ่ม RAM ให้กับ Server) และแนวนอน (ใช้ Redis Cluster เพื่อกระจายข้อมูลไปยังหลาย Server)
  • ความยืดหยุ่น: Redis รองรับ data structure ที่หลากหลาย ทำให้สามารถนำไปใช้ใน Use case ที่หลากหลายได้
  • ใช้งานง่าย: Redis มี API ที่ใช้งานง่าย และมี Client Library ให้ใช้งานในหลายภาษา programming
  • Open Source: Redis เป็น Open Source ทำให้ไม่มีค่าใช้จ่ายในการใช้งาน และมี Community ที่แข็งแกร่ง

Use case ที่เหมาะสม

Redis Cache เหมาะสมกับ Use case ที่ต้องการความเร็วในการเข้าถึงข้อมูลสูง และข้อมูลมีการเปลี่ยนแปลงไม่บ่อยนัก ตัวอย่าง Use case ที่เหมาะสม:

  • Caching ข้อมูลจากฐานข้อมูล: Cache ผลลัพธ์ของการ query ฐานข้อมูลที่ใช้บ่อยๆ เช่น ข้อมูลผู้ใช้งาน, ข้อมูลสินค้า
  • Caching session data: จัดเก็บ session data ของผู้ใช้งานไว้ใน Redis เพื่อให้สามารถเข้าถึง session data ได้อย่างรวดเร็ว
  • Caching API responses: Cache ผลลัพธ์ของการเรียก API เพื่อลดภาระของ API Server
  • Rate limiting: จำกัดจำนวนครั้งที่ผู้ใช้งานสามารถเข้าถึง API หรือ Resource อื่นๆ ได้
  • Real-time analytics: ใช้ Redis เพื่อเก็บข้อมูล analytics แบบ Real-time เช่น จำนวนผู้ใช้งานที่ออนไลน์, จำนวนการเข้าชมหน้าเว็บ
  • Message queue: ใช้ Redis เป็น message queue เพื่อส่งข้อความระหว่าง components ต่างๆ ของแอปพลิเคชัน

ตัวอย่าง: Caching ข้อมูลผู้ใช้งาน

สมมติว่าคุณมีเว็บไซต์ที่มีข้อมูลผู้ใช้งานจำนวนมาก และผู้ใช้งานต้อง Login เข้าสู่ระบบบ่อยๆ การ query ข้อมูลผู้ใช้งานจากฐานข้อมูลทุกครั้งที่ผู้ใช้งาน Login จะทำให้ฐานข้อมูลมีภาระมาก คุณสามารถใช้ Redis Cache เพื่อ Cache ข้อมูลผู้ใช้งานได้ดังนี้:

  1. เมื่อผู้ใช้งาน Login ให้ query ข้อมูลผู้ใช้งานจากฐานข้อมูล
  2. นำข้อมูลผู้ใช้งานที่ได้มาเก็บไว้ใน Redis โดยใช้ user ID เป็น key
  3. ครั้งต่อไปที่ผู้ใช้งาน Login ให้ตรวจสอบใน Redis ก่อน ถ้าพบข้อมูลผู้ใช้งานใน Redis (Cache Hit) ก็ให้นำข้อมูลนั้นมาใช้ได้เลย
  4. ถ้าไม่พบข้อมูลผู้ใช้งานใน Redis (Cache Miss) ให้ query ข้อมูลจากฐานข้อมูล แล้วนำข้อมูลที่ได้มาเก็บไว้ใน Redis เพื่อใช้ในอนาคต

ตัวอย่างโค้ด PHP (อย่างง่าย)

<?php

// เชื่อมต่อกับ Redis Server
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

$userId = 123;
$userKey = 'user:' . $userId;

// ตรวจสอบว่ามีข้อมูลผู้ใช้งานใน Redis หรือไม่
if ($redis->exists($userKey)) {
  // Cache Hit: ดึงข้อมูลจาก Redis
  $userData = json_decode($redis->get($userKey), true);
  echo "ข้อมูลผู้ใช้งานจาก Redis: \n";
  print_r($userData);
} else {
  // Cache Miss: ดึงข้อมูลจากฐานข้อมูล
  // (สมมติว่ามีฟังก์ชัน getUserFromDatabase($userId) ที่ดึงข้อมูลจากฐานข้อมูล)
  $userData = getUserFromDatabase($userId);

  // เก็บข้อมูลผู้ใช้งานไว้ใน Redis (หมดอายุใน 30 นาที)
  $redis->setex($userKey, 1800, json_encode($userData));

  echo "ข้อมูลผู้ใช้งานจากฐานข้อมูล: \n";
  print_r($userData);
}

?>

โค้ดนี้เป็นตัวอย่างง่ายๆ แสดงให้เห็นถึงหลักการทำงานของการใช้ Redis Cache ใน PHP คุณจะต้องปรับแก้โค้ดให้เหมาะสมกับโครงสร้างแอปพลิเคชันของคุณ

ในบทความถัดไป เราจะมาเรียนรู้วิธีการติดตั้งและตั้งค่า Redis บน Ubuntu

Office.in.th Custom Service

この構成をもとにシステムを開発・カスタマイズしたいですか?

Office.in.th は、エンタープライズ Web アプリケーション、API 連携、官民の業務管理システムの設計・開発を承り、長期的なサポートも提供します。

ソフトウェア開発サービスを見る