MySQL Database With Redis
MySQL คือระบบการจัดการฐานข้อมูลแบบ relational (RDBMS) ที่เก็บข้อมูลในตารางและสามารถจัดการข้อมูลด้วย SQL (Structured Query Language) ส่วน Redis คือระบบการจัดการฐานข้อมูลแบบ in-memory ที่เก็บข้อมูลในรูปแบบ key-value และมีความเร็วสูงมากในการอ่านและเขียนข้อมูล เมื่อใช้งานร่วมกัน, MySQL และ Redis สามารถเสริมสร้างประสิทธิภาพของแอปพลิเคชันได้อย่างมาก
2024-03-05 06:10:02 - @ratanon
การทำงานร่วมกันของ 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