เวอร์ชันใหม่นี้เป็นขั้นตอนวิวัฒนาการของฟีเจอร์บางอย่างของ Redis เพิ่มฟีเจอร์ใหม่ๆ และมอบพลังที่มากขึ้นโดยใช้ทรัพยากรที่ดีขึ้น
วันนี้ เราภูมิใจประกาศความพร้อมใช้งานของตัวเลือกรุ่นแรกของ Redis v7 (RC1) เวอร์ชัน 7.0 เป็นก้าวสำคัญของโปรเจ็กต์ที่อยู่ระหว่างการพัฒนาให้ดีขึ้นในปีที่ผ่านมา รุ่นใหญ่นี้เป็นโอกาสในการทำการเปลี่ยนแปลงที่รุนแรงยิ่งขึ้นในแง่ของการทำงานและการทำงานภายใน เราคาดว่าจะเป็นไปตามรอบการเผยแพร่ตามปกติ ดังนั้นผู้สมัครอีกสองคน ซึ่งแต่ละรายห่างกันประมาณสามสัปดาห์ ได้รับการวางแผนก่อนวางจำหน่าย Redis 7.0 ทั่วไป
Redis 7.0 เพิ่มคุณสมบัติใหม่มากมาย เช่น Functions, ACL v2, sharded Pub/Sub และอื่นๆ เราจะกล่าวถึงสิ่งเหล่านี้ในโพสต์นี้และชุดของโพสต์ต่อไปนี้ นอกจากนี้ งานจำนวนมากที่ใส่ลงในเวอร์ชันนี้เน้นไปที่การปรับปรุงและเพิ่มประสิทธิภาพส่วนต่างๆ ของ Redis ที่ผู้ใช้ส่วนใหญ่มองไม่เห็น ความพยายามนี้ขยายไปถึงระบบย่อย Redis ทุกระบบ ไม่ว่าจะเป็นการคงอยู่ การจำลองแบบ เครือข่าย หน่วยความจำ และการใช้งานการคำนวณ ผลลัพธ์ที่ได้คือ Redis ที่เร็วกว่า เสถียรกว่า และประหยัดกว่าที่เคย
เวอร์ชัน Redis ใหม่ไม่ได้ประกาศโครงสร้างข้อมูลใหม่หรือผลักดันด้านการปฏิบัติงานไปสู่อาณาจักรใหม่ แต่เป็นมากกว่าการพิจารณาโครงการแบบไตร่ตรอง ท้าทายสมมติฐานการออกแบบที่มีอยู่ ดำเนินการตามขั้นตอนที่ชัดเจนยิ่งขึ้นในการปรับปรุงโครงสร้างพื้นฐาน และปรับความต้องการและกรณีการใช้งานของชุมชนภายใน
ฟังก์ชัน Redis คือตัวอย่างข้างต้น ฟังก์ชันอยู่ในหัวข้อที่กว้างขึ้นของ Redis Programmability ซึ่งหมายถึงความสามารถในการตั้งโปรแกรม Redis ในการ "โปรแกรม Redis" หมายถึงให้เซิร์ฟเวอร์ดำเนินการตรรกะของผู้ใช้ โดยเฉพาะสำหรับพื้นที่ข้อมูล ความสามารถในการตั้งโปรแกรมเป็นส่วนหนึ่งของ Redis นับตั้งแต่เปิดตัวสคริปต์ Lua ในเวอร์ชัน 2.6 (โปรดดูรายละเอียดเพิ่มเติมที่ Introduction to Eval Scripts)
การนำสคริปต์ Lua ไปใช้โดยผู้ใช้ Redis เพิ่มขึ้นเรื่อย ๆ ตั้งแต่นั้นมา สคริปต์เป็นวิธีที่มีประสิทธิภาพและเรียบง่ายในการเขียนเวิร์กโฟลว์ฝั่งเซิร์ฟเวอร์จากการดำเนินการหลัก Redis และโครงสร้างการควบคุม พวกเขาสามารถทำหน้าที่เป็นนามธรรมของโครงสร้างข้อมูลพื้นฐานจากโค้ดเนทีฟของแอปพลิเคชัน ชุดสคริปต์ Lua ของแอปพลิเคชันใช้การดำเนินการเชิงตรรกะ (เช่น สคริปต์ "เพิ่มผู้ใช้" หรือ "สั่งซื้อ")
เนื่องจากการเขียนสคริปต์เป็นฟีเจอร์ยอดนิยมของ Redis ที่มีมาช้านาน เราจึงรวบรวมความคิดเห็นมากมายเกี่ยวกับเรื่องนี้ เราพบว่าข้อกำหนดส่วนใหญ่แบ่งออกเป็นสามกลุ่ม:
- อิสรภาพ :สคริปเป็นส่วนหนึ่งของแอปพลิเคชัน พวกมันสะท้อนถึงอวัยวะภายในของมัน ดังนั้นพวกมันจึงแนบแน่นกับการใช้งานจริง แอปพลิเคชันจำเป็นต้องฝังซอร์สโค้ดของสคริปต์และโหลดตอนรันไทม์ ความพัวพันนี้จะเพิ่มความซับซ้อนในทุกขั้นตอนของวงจรชีวิตของแอปพลิเคชัน ตั้งแต่การพัฒนา การทดสอบ ไปจนถึงการทำให้ใช้งานได้
- เครื่องมือดำเนินการ :มีเพียงภาษาเดียวสำหรับการเขียนสคริปต์ใน Redis:Lua นอกจากนี้ เนื่องจากเหตุผลทางเทคนิคมากมาย Redis จึงใช้ Lua 5.1 เดียวกันมาโดยตลอด หลายคนอยากได้เวอร์ชั่นใหม่กว่านี้ คนส่วนใหญ่ต้องการภาษาอื่นโดยสิ้นเชิง
- ความทนทาน :การออกแบบและการนำสคริปต์ Lua ไปใช้ใน Redis เช่นเดียวกับซอฟต์แวร์อื่นๆ ทำการตั้งสมมติฐานและมีขีดจำกัด ในบางกรณี การขยายกลไกนี้ซับซ้อนมาก หากไม่สามารถทำได้ การขาดรากฐานทำให้เราเพิ่มคุณลักษณะที่อาจมีคุณค่า (เช่น การประมวลผลเหตุการณ์และสคริปต์คลัสเตอร์ เป็นต้น)
ที่นำเรากลับไปที่ Redis Functions ใน Redis 7.0 ฟังก์ชันต่างๆ จะเป็นอิสระจากแอปพลิเคชันทั้งหมด ด้วยเหตุนี้ ฟังก์ชันจึงเป็นซอฟต์แวร์ที่เรียกใช้งานได้ซึ่งเป็นพลเมืองฐานข้อมูลชั้นหนึ่ง เซิร์ฟเวอร์ Redis จัดการฟังก์ชันต่างๆ เหมือนกับข้อมูลผู้ใช้ ดังนั้นจึงยังคงมีการคงอยู่และทำซ้ำสำหรับความพร้อมใช้งาน การโหลดฟังก์ชันไปยังฐานข้อมูลไม่ใช่ความรับผิดชอบของแอปพลิเคชันระหว่างรันไทม์อีกต่อไป และกลายเป็นงานบำรุงรักษาระดับผู้ดูแลระบบที่สามารถจัดกำหนดการและจัดการได้
การมีฟังก์ชันอยู่ในบริบทของเซิร์ฟเวอร์ทำให้แอปพลิเคชันเป็นอิสระจากการใช้งานฟังก์ชันต่างๆ แอปพลิเคชันอาศัยลายเซ็นของฟังก์ชันเป็น API ของลอจิกแบบฝัง และไม่สนใจคำสั่งและประเภท Redis ทั้งหมดที่กำลังเล่นอยู่ อนุญาตให้แอปพลิเคชั่นต่าง ๆ แบ่งปันฟังก์ชั่น นอกจากนี้ยังช่วยให้สามารถพัฒนา ทดสอบ และบำรุงรักษาฟังก์ชันได้โดยไม่ต้องพึ่งพาแอปพลิเคชัน
การออกแบบฟังก์ชัน Redis นั้นไม่เกี่ยวกับเครื่องยนต์ แม้ว่า Redis 7.0 จะรองรับเฉพาะฟังก์ชันที่เขียนใน Lua 5.1 แต่การใช้งาน internals ก็เกือบจะพร้อมที่จะเชื่อมต่อกับเอ็นจิ้นการดำเนินการอื่นๆ เราวางแผนที่จะเพิ่มการรองรับสำหรับเอ็นจิ้นการดำเนินการประเภทอื่นๆ ในอนาคต
กระบวนทัศน์อีกประการหนึ่งที่ทำหน้าที่สร้างคือการใช้ไลบรารี ไลบรารีสามารถประกอบด้วยฟังก์ชันที่ลงทะเบียนไว้ตั้งแต่หนึ่งฟังก์ชันขึ้นไปและฟังก์ชันภายในเพิ่มเติม ฟังก์ชันที่ลงทะเบียนคือจุดเริ่มต้นของไลบรารีและ API ตามสัญญาของแอปพลิเคชัน ในทางกลับกัน ฟังก์ชันภายในสามารถเรียกใช้งานได้จริงภายในไลบรารีเพื่อให้โค้ดนำกลับมาใช้ใหม่ได้
เราคาดว่าการแนะนำฟังก์ชันใน Redis 7.0 จะเป็นก้าวสำคัญไปสู่การนำความสามารถในการตั้งโปรแกรมของ Redis ไปสู่ขั้นต่อไป หากคุณใช้สคริปต์ Lua ในแอปพลิเคชันของคุณอยู่แล้ว การโยกย้ายไปยังการใช้ฟังก์ชันนั้นเป็นทางเลือกและเรียบง่าย (ดูฟังก์ชัน Redis สำหรับข้อมูลเพิ่มเติม) ยิ่งไปกว่านั้น เมื่อเราก้าวไปข้างหน้า ฟังก์ชันต่างๆ จะมอบรากฐานที่ดีขึ้นในการปรับปรุงและสร้างสรรค์สิ่งใหม่ๆ ด้วยความสามารถในการตั้งโปรแกรมของ Redis