รับทําเว็บไซต์ รับทําseo
บทความที่น่าสนใจ

บทความ ที่น่าสนใจ

Redis คืออะไร ?

    Redis เป็น in-memory data structure store หรือ ระบบเก็บข้อมูลแบบกึ่งมีโครงสร้าง ที่ทำงานบน Ram มองว่ามันเป็นเหมือน database ที่ทำงานบน Ram ก็ไม่ผิดเท่าไรหรอก ซึ่งตัว Redis มันทำงานได้เร็วมากๆ จึงนิยมทำเป็น Caching หรือเป็น temporary database เพื่อใช้ในการประมวลผลงานขนาดใหญ่

    คนที่ทำงานกับระบบใหญ่ๆ จะรู้เลยว่า ระบบการทำงานในปัจจุบัน มีคอขวด อยู่ที่ระบบ database คือ อ่านข้อมูลจาก database ออกมา หรือ เขียนข้อมูลกลับเข้า database ไม่ทันต่อการใช้งานที่มีปริมาณเยอะมากๆ คนที่เลือกใช้ Redis ซึ่งเป็น NoSQL เพราะว่ามันทำงานได้รวดเร็ว แต่เค้าก็จะทำงานกับข้อมูลที่เก็บอยู่ลำบากขึ้นนิดนึง เพราะคนใช้ NoSQL ต้องวาง algorithm การเก็บข้อมูล และการเรียกข้อมูลมากกว่าคนใช้งาน database แบบ relation มาก คือต้องคิดเยอะๆ ไม่งั้นแล้วก็จะเอาข้อมูลที่เก็บไว้ ออกมาใช้ได้ลำบาก หรือกลายเป็นขยะไป

    หลักการทำงานของ redis
    redis มีการเก็บค่าแบบ key value ก็คือ การตั้งชื่อ (key) และการกำหนดค่าให้มัน(value) ซึ่งจะเป็นแบบ binary safe คือ ไม่ว่าเราจะใส่ value อะไรเข้าไปยังไงหน้าตาแบบไหน ตอนออกมาก็จะมีหน้าตาเหมือนเดิมเลย โดยมีข้อจำกัด 1 key เก็บ value ได้สูงสุดที่ 512MB

    redis ยังมีการเก็บค่าอีกหลายแบบ ทำให้เราสั่งให้ redis ทำงานตามเงื่อนไขที่เราต้องการได้มากขึ้น เช่น การใช้ list ในการเรียงลำดับค่า ที่ลำดับ มีความสำคัญ เช่นการ post ข้อความที่มาก่อนหรือหลัง หรือการเข้าคิว มาก่อน มาหลัง (ถ้าแบบ SQL ก็คือ ORDER BY) โดยไม่เสียเวลาในการ sort เลย หรือว่า การใช้ set ในการเก็บ member เช่น เอาไว้เก็บ ว่า เรามีเพื่อนเป็น id อะไรบ้าง ใน key เพียง key เดียวเท่านั้น(ถ้า SQL เราก็ต้องเก็บ primary key จับคู่กับ foreign key ให้ครบเพื่อนทุกคน) และยังเอามาทำงานต่อได้ เช่น หาว่า เพื่อนเรา เป็นเพื่อนของเพื่อนนาย A กี่คน หรือว่า Z เป็นเพื่อนของเรากับเพื่อนของนาย A หรือเปล่า (SQL ก็ใช้ WHERE ผสม JOIN) หากเราเอางานแบบนี้ไปทำใน SQL database ที่มีจำนวนข้อมูลเป็นล้านๆล่ะก็ รับรองครับ แค่สองคำสั่งนี้ก็แทบไม่ต้องทำอะไรต่อแล้ว

    Redis เหมาะกับงานแบบไหน
    Redis เหมาะกับใช้งานที่ต้องการประมวลผล data จาก Ram เยอะๆมากๆ ในเวลารวดเร็ว เพราะมันก็มี feature นึงคือเราเขียน Lua script เข้าไปให้ Redis ทำงานได้ด้วย เพื่อให้มันทำงานได้เร็วขึ้นไปอีก จริงอยู่ว่าช้ากว่าการทำงาน Operation ปกติของ Redis แต่มันก็เร็วกว่าให้ Application เราอ่านค่ามาและประมวลผล แล้วส่งกลับเข้าไปอย่างแน่นอน หรือว่าคนที่ใช้ sets เราจะสามารถสั่งให้มัน sort value ข้างในได้ในคำสั่งเดียว เช่นเอามาเก็บ score แล้ว sort เอาผลการ sort มาใช้ต่อ

    หรืออีก feature นึงที่หลายคนไม่เคยใช้ และอาจจะไม่รู้ว่ามันมี ก็คือ publish/subscribe ที่เอามาประยุกต์ใช้กับงาน real time application ได้อย่างลงตัว ให้นึกถึงมือถือเรา ที่สามารถทำงาน 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 ได้ครับ) แต่เราไม่เอามาใช้งานแบบนั้น

    การนำ Redis ไปประยุกต์ใช้งาน
    หลายคนก็เอามาใช้ประโยชน์ ให้ตรงวัตถุประสงค์ เช่น เอามาทำเป็น cache ของ database แบบ relation อีกทีนึง เช่น เราต้อง เรียกข้อมูลที่มีความซับซ้อนมากๆ จาก MySQL ออกมา ครั้งนึงอาจจำทำงาน 500ms หากเราเรียก 1 แสนครั้ง MySQL อาจจะทำงานไม่ทันก็ได้ เพราะต้องเข้าคิวยาวมากกก แต่หากเราเรียกจาก MySQL เพียงครั้งเดียว แล้วเก็บขึ้นไปไว้ใน database NoSQL แล้ว หลังจากนั้นเราก็ไม่ต้องใช้ MySQL อีกเลย เพราะไปเรียกจาก NoSQL เพียงอย่างเดียว เท่านี้ เว็บก็รองรับการใช้งานเพิ่มขึ้นอีกมากไม่รู้กี่เท่าตัว เพราะเค้าบอกว่า NoSQL จะทำงานได้เร็วกว่า SQL แบบเดิม หลายเท่าตัวเลย

    Redis กับ memcached ต่างกันอย่างไร
    ทำงานได้เร็วดีทั้งคู่ และทำงานเปน key-value ทั้งคู่ ถ้าต้องการเพียงแค่ cache key-value ง่ายๆเร็วๆ memcached แน่นอน แต่ถ้าอยากได้ feature อื่นที่ไม่ว่าจะเป็น hashed, pub/sub, lists, sets หรืออื่นๆ ต้อง Redis อย่างแน่นอน

บทความที่น่าสนใจ

บทความ ล่าสุด

บทความ ความรู้ด้านไอที, คอมพิวเตอร์ Techonlogy, Gadget, ความรู้เกี่ยวกับคอมพิวเตอร์ กับทาง SoftMelt.com