MySQL Database With Redis

MySQL คือระบบการจัดการฐานข้อมูลแบบ relational (RDBMS) ที่เก็บข้อมูลในตารางและสามารถจัดการข้อมูลด้วย SQL (Structured Query Language) ส่วน Redis คือระบบการจัดการฐานข้อมูลแบบ in-memory ที่เก็บข้อมูลในรูปแบบ key-value และมีความเร็วสูงมากในการอ่านและเขียนข้อมูล เมื่อใช้งานร่วมกัน, MySQL และ Redis สามารถเสริมสร้างประสิทธิภาพของแอปพลิเคชันได้อย่างมาก


การทำงานร่วมกันของ MySQL และ Redis มักจะเป็นในรูปแบบของการใช้ Redis เป็น layer สำหรับ caching ข้อมูลจาก MySQL เพื่อลดการโหลดข้อมูลซ้ำๆ จากฐานข้อมูล MySQL ซึ่งสามารถช่วยลด latency และเพิ่มประสิทธิภาพในการตอบสนองของแอปพลิเคชันได้อย่างมาก นี่คือภาพรวมของวิธีการทำงาน


1.การเรียกข้อมูล: เมื่อแอปพลิเคชันต้องการข้อมูล, มันจะเริ่มต้นด้วยการตรวจสอบใน Redis เพื่อดูว่าข้อมูลที่ต้องการนั้นมีอยู่ใน cache หรือไม่

  • ถ้ามี (cache hit), ข้อมูลจะถูกส่งกลับไปยังแอปพลิเคชันทันที, ซึ่งช่วยลดเวลาในการเข้าถึงข้อมูลได้อย่างมาก
  • ถ้าไม่มี (cache miss), แอปพลิเคชันจะเรียกข้อมูลจาก MySQL

2.การอัปเดต cache: เมื่อข้อมูลถูกเรียกจาก MySQL แล้ว, ข้อมูลนั้นจะถูกเพิ่มเข้าไปใน Redis เพื่อให้การเข้าถึงในครั้งต่อไปเร็วขึ้น


3.การจัดการ cache: Redis มีกลไกต่างๆ เช่น expiration policies และ eviction policies ที่ช่วยให้สามารถจัดการข้อมูลใน cache ได้อย่างมีประสิทธิภาพ, โดยอัตโนมัติลบข้อมูลที่ไม่ใช้แล้วออกจาก cache เพื่อปล่อยพื้นที่สำหรับข้อมูลใหม่


4.การเขียนข้อมูล: การเขียนหรืออัปเดตข้อมูลจะทำผ่าน MySQL และข้อมูลใน Redis จะถูกอัปเดตหรือลบออกเพื่อป้องกันความไม่สอดคล้องกันของข้อมูลระหว่าง cache และฐานข้อมูลหลัก


การใช้งาน MySQL ร่วมกับ Redis ในลักษณะนี้ช่วยให้สามารถรวมความเร็วและประสิทธิภาพของการเก็บข้อมูลแบบ in-memory จาก Redis กับความสามารถในการจัดการข้อมูลแบบ relational ของ MySQL ได้อย่างลงตัว นอกจากนี้ยังช่วยให้แอปพลิเคชันสามารถจัดการกับภาระงานที่มีขนาดใหญ่และปรับขนาดได้ดีขึ้นโดยไม่ต้องเสียสละความน่าเชื่อถือหรือความสามารถในการเข้าถึงข้อมูลที่ซับซ้อน

เปรียบเทียบระหว่างการใช้ Redis และการเรียกตรงๆ


ลองศึกษาเพิ่มเติมจากลิ้งนี้ https://redis.com/blog/3-reasons-your-mysql-db-needs-redis/


ภาคต่อเดี๋ยวมาเล่าวิธีการ Install Redis on CyberPanel เพื่อใช้กับเว็บที่ข้อมูลขนาดใหญ่กันครับ


ลองเขียน php ทดสอบและลองมอนิเตอร์ดูจะได้ประมาณนี้

<?php
define('TEST_KEY', 'are_we_glued');
$redis = new Redis();
try {
  $redis->connect('localhost', 6379);
  $redis->set(TEST_KEY, 'yes');
  $glueStatus = $redis->get(TEST_KEY);
  if ($glueStatus) {
    $testKey = TEST_KEY;
    echo "Glued with the Redis key value store:" . PHP_EOL;
    echo "1. Got value '{$glueStatus}' for key '{$testKey}'." . PHP_EOL;
    if ($redis->delete(TEST_KEY)) {
      echo "2. And already removed the key/value pair again." . PHP_EOL;
    }
  } else {
    echo "Not glued with the Redis key value store." . PHP_EOL;
  }
} catch (RedisException $e) {
  $exceptionMessage = $e->getMessage();
  echo "{$exceptionMessage}. Not glued with the Redis key value store." . PHP_EOL;
}


root@WEB-SERVER:~# redis-cli                                                                                                                        
127.0.0.1:6379> MONITOR  
0
57