วันพฤหัสบดีที่ 25 มกราคม พ.ศ. 2561

redis คืออะไร

redis คืออะไร คือ database ที่ทำงานได้เร็วมาก

Redis logo
ถ้าเอาให้ถูกต้องจริงๆ เค้านิยามว่า Redis เป็น in-memory data structure store หรือ ระบบเก็บข้อมูลแบบกึ่งมีโครงสร้าง ที่ทำงานบน Ram แต่อยากให้มองว่ามันเป็นเหมือน database ที่ทำงานบน Ram ก็ไม่ผิดเท่าไรหรอก แต่ว่าความสามารถของมันค่อนข้างพิเศษมาก เพราะว่ามันทำงานได้เร็วมากๆ จึงถูกนิยมเอามาทำเป็น Caching หรือเป็น temporary database เพื่อใช้ในการประมวลผลงานขนาดใหญ่ได้
ถ้าเปรียบเทียบกับตัวอื่นที่คุ้นหูก็จะเป็น memcached ที่ทำหน้าที่เป็น key-value data store system นั่นแหล่ะ แต่ Redis มีดีกว่านั้นอีกเยอะมาก เพราะว่า key-value มันทำได้เป็นพื้นฐานอยู่แล้ว แต่ว่ามีลูกเล่นอื่นๆ ให้เราเอามาใช้ได้เลย เช่น hashes ที่เปรียบเหมือนการเก็บเข้า key เดียว แต่ว่า value มี array อยู่ข้างในอีกด้วย และเราสามารถดึงเอา index ใด index หนึ่งออกมาใช้ได้ หรือเปลี่ยนค่าเฉพาะบาง index หรือแม้กระทั่งลบออกก็ทำได้ ถ้าเราเก็บเป็น memcached เราจะต้อง ดึงทุก index ออกมากระทำให้เป็นชุด array ที่สมบูรณ์ก่อนค่อยใส่กลับเข้าไป ซึ่งมันจะช้ากว่าอย่างเห็นได้ชัด

Redis เหมาะกับงานแบบไหน

Redis เหมาะกับใช้งานที่ต้องการประมวลผล data จาก Ram เยอะๆมากๆ ในเวลารวดเร็ว เพราะมันก็มี feature นึงคือเราเขียน Lua script เข้าไปให้ Redis ทำงานได้ด้วย เพื่อให้มันทำงานได้เร็วขึ้นไปอีก จริงอยู่ว่าช้ากว่าการทำงาน Operation ปกติของ Redis แต่มันก็เร็วกว่าให้ Application เราอ่านค่ามาและประมวลผล แล้วส่งกลับเข้าไปอย่างแน่นอน หรือว่าคนที่ใช้ sets เราจะสามารถสั่งให้มัน sort value ข้างในได้ในคำสั่งเดียว เช่นเอามาเก็บ score แล้ว sort เอาผลการ sort มาใช้ต่อ
หรืออีก feature นึงที่หลายคนไม่เคยใช้ และอาจจะไม่รู้ว่ามันมี แต่มันเจ๋งมาก ก็คือ publish/subscribe ที่เอามาประยุกต์ใช้กับงาน real time application ได้อย่างลงตัว ถ้านึกไม่ออกว่า pub/sub คืออะไรให้นึกถึงมือถือเรา ที่สามารถทำงาน push notification ได้ นั่นแหล่ะ เราแค่เขียน client ของเราให้ไป subscribe redis สักตัวนึงเอาไว้ แล้วเราก็ publish ข้อความจาก server เข้าไปที่ redis ตัวนั้น ทุกคนที่ subscribe อยู่ก็จะได้ message นั้นไปพร้อมๆกันเลย ตัวนี้ เอาไปประยุกต์ใช้อีกอย่างก็คือ การทำงานที่เป็น state machine ที่ต้องทำสิ่งหนึ่งเสร็จก็ไปทำอีกสิ่งหนึ่งต่อ แต่ละคนก็จะ subscribe เป็น chain ต่อไปเรื่อยๆ แล้วก็ใช้การ publish เป็นการส่งไม้ต่อให้ process ต่อไปทำงานได้ เหมือนวิ่งผลัดอย่างนั้นเลย ก็แล้วแต่คนจะประยุกต์ล่ะครับ

Redis ใช้เป็น database เก็บข้อมูลถาวรได้มั้ย

ถ้าถามผมว่า เอามาใช้งานเป็น database เก็บข้อมูลทดแทน MySQL, Maria, MongoDB, MSSQL หรืออื่นๆเลยดีมั้ย ผมกล้าพูดได้เลยว่า อย่าเลยครับ หน้าที่ของมันเกิดมา ชัดเจนว่าไม่ได้เป็น persistent database ที่จะเก็บข้อมูลลง harddisk ตลอดไป (ในความจริง Redis config ให้เขียนลง harddisk ได้ครับ) แต่เราไม่เอามาใช้งานแบบนั้น ผมแนะนำให้ใช้งาน Database ที่เก็บข้อมูลทนๆเอาไว้สักตัวหนึ่ง แล้วเวลาเขียน application ให้เรียกค่าจาก Redis ก่อน ถ้าไม่มีให้อ่านค่าจาก Harddisk เช่น MySQL แล้วเอาค่ามาแปะใน redis พร้อมทั้งเอาไปใช้ต่อ แล้วการเรียกใช้ครั้งต่อไป Redis ก็จะตอบสนองแทนไปได้เลย แบบนี้เหมาะสุดครับ เพราะระบบล่มเมื่อไรก็ยังสามารถอ่านค่าออกมาจาก database อื่น และเอามาแปะ Redis ได้โดยอัตโนมัติเลย

Redis กับ memcached

ทำงานได้เร็วดีทั้งคู่ และทำงานเปน key-value ทั้งคู่ แต่ถ้าให้ผมแนะนำ ว่าใช้ตัวไหนดี ผมอยากให้แยกง่ายๆว่า ถ้าคุณต้องการเพียงแค่ cache key-value ง่ายๆเร็วๆ ฟันธงเลย memcached แน่นอน แต่ถ้าอยากได้ feature อื่นที่เป็นท่ายาก ไม่ว่าจะเป็น hashed, pub/sub, lists, sets หรืออื่นๆ ต้อง Redis อย่างแน่นอน แต่ ก็ไม่ได้หมายความว่า เครื่องเดียวกันจะใช้ทั้ง memcached ผสม Redis ไม่ได้นะครับ ทำได้ครับ เพราะว่าไม่เกี่ยวข้องกันเลย เพียงแค่ว่า Application เราจะต้องมีการจัดโครงสร้างและ flow การอ่านข้อมูลให้ดี เพื่อจะได้ไม่งงตัวเอง และได้ประสิทธิภาพที่สูงที่สุดครับ

Redis เป็น NoSQL ใช่มั้ย

ก็จะว่าอย่างนั้นก็ได้ครับ Redis เป็นกลุ่ม NoSQL ด้วยเช่นกัน เพราะว่าทำงานแบบ un structure คือเราก็สามารถสร้าง structure ได้อย่างที่เราต้องการเองเลย แค่เลือกใช้งานให้ถูกประเภท และวางโครงสร้างให้ถูกต้อง ว่าข้อมูลแบบไหนต้องเก็บเป็นอะไร เราก็จะได้ประโยชน์จากมันสูงที่สุดครับ
สรุป Redis คือ Data store ที่ทำงานได้หลายรูปแบบ และทำงานบน memory จึงทำงานได้เร็วมาก และ มี feature ที่ตอบสนองต่อการทำงานหลายแบบในเวลาอันสั้น เพื่อให้ได้คำตอบอย่างที่ต้องการ มันจึงเป็นมากกว่า key-value database อย่าง memcached แต่ก็ไม่เหมาะกับการเก็บข้อมูลถาวรอย่าง MySQL ครับ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น

Set MongoDB in the windows path environment

  Let’s set MongoDB in the windows environment in just a few steps. Step 1: First download a suitable MongoDB version according to your mach...