Redis XTRIM

Redis Xtrim



รายละเอียดระดับต่ำของ Redis Streams

สตรีม Redis เป็นโครงสร้างข้อมูลแบบผนวกเท่านั้นที่ให้ชุดของการดำเนินการอ่านและแทรกที่มีประสิทธิภาพสูงพร้อมกลไกการจัดเก็บที่มีประสิทธิภาพหน่วยความจำ ภายใน สตรีม Redis ใช้โครงสร้างข้อมูล Radix tree ซึ่งเป็นทรีที่ปรับพื้นที่ให้เหมาะสมพร้อมประสิทธิภาพหน่วยความจำสูง

สตรีม Redis เก็บข้อมูลเป็นรายการของรายการที่แต่ละรายการประกอบด้วยคู่คีย์-ค่า ที่ระดับต่ำ รายการเหล่านี้จะถูกบรรจุลงในโหนดแมโคร ดังที่แสดงต่อไปนี้









ในบทความนี้ เรากำลังมุ่งเน้นไปที่การลบรายการสตรีมโดยใช้คำสั่ง XTRIM และแนวคิดที่กล่าวถึงข้างต้นมีผลอย่างมากต่อประสิทธิภาพของการดำเนินการลบ โดยปกติ การลบรายการสตรีม Redis จะมีประสิทธิภาพมากหากดำเนินการเสร็จสิ้นในระดับโหนดมาโครแต่ไม่อยู่ในระดับรายการ กลไกนี้ใช้กับคำสั่ง XTRIM ที่เราจะพูดถึงในหัวข้อต่อไปนี้



คำสั่ง XTRIM

คำสั่ง XTRIM ใช้เพื่อตัดรายการสตรีมตามค่าเกณฑ์ที่กำหนด เกณฑ์สามารถเป็นจำนวนสูงสุดของรายการต่อสตรีมหรือรหัสรายการที่เก่ากว่า คำสั่ง XTRIM ยอมรับประเภทของขีดจำกัดเป็นอาร์กิวเมนต์คำสั่ง ไวยากรณ์ของคำสั่ง XTRIM มีดังนี้





XTRIM stream_key MAXLEN | MINID [ = | ~ ] threshold_value [ LIMIT จำนวน ]

stream_key : คีย์ของสตรีม Redis

MAXLEN : ความยาวสูงสุดของสตรีมหลังจากการตัดแต่งรายการ รายการทั้งหมดจะถูกลบออกที่เกินความยาวของสตรีม ซึ่งระบุโดยค่าเกณฑ์ อาร์กิวเมนต์นี้เป็นจำนวนเต็มบวก

MINID : รหัสสตรีมขั้นต่ำที่ควรคงอยู่หลังจากตัดรายการ รายการทั้งหมดจะถูกลบออกที่มี ID ต่ำกว่าเกณฑ์ที่ระบุ เมื่อใดก็ตามที่คุณระบุพารามิเตอร์นี้ เกณฑ์จะกลายเป็นรหัสสตรีม

= โอเปอเรเตอร์ : เมื่อระบุ การตัดแต่งจะดำเนินการตามค่าเกณฑ์

~ โอเปอเรเตอร์ : เมื่อระบุไว้ การตัดแต่งเกือบจะแม่นยำจะดำเนินการตามค่าเกณฑ์และขนาดมาโครโหนด

threshold_value : ค่าขีดจำกัดตามอาร์กิวเมนต์ MAXLEN หรือ MINID

LIMIT จำนวน : จำนวนรายการสูงสุดที่จะลบ

ใช้กรณีที่ 01 – การลบรายการสตรีมตามความยาวสูงสุด

สมมติว่าบริษัทท่องเที่ยวมีร้าน Redis เพื่อติดตามข้อมูลการท่องเที่ยว โครงสร้างข้อมูลสตรีม Redis ถูกใช้เพื่อจัดเก็บข้อมูลของนักท่องเที่ยวแต่ละรายเป็นคู่คีย์-ค่า เมื่อเวลาผ่านไป สตรีมได้เติบโตขึ้น และพวกเขาวางแผนที่จะเก็บเฉพาะ 1,000 รายการล่าสุดเท่านั้น ดังนั้นพวกเขาจึงได้ระบุความยาวสูงสุดของสตรีมที่ควรจะเป็น 1,000 เมื่อใดก็ได้ คำสั่ง XTRIM ถูกใช้เพื่อให้บรรลุเป้าหมายนี้

เพื่อจุดประสงค์ในการสาธิต ขั้นแรก เราจะสร้างสตรีมที่มี 10 รายการดังนี้ คำสั่ง XADD ถูกใช้เพื่อทำการแทรก

xadd ข้อมูลการท่องเที่ยว * ชื่อ แจ็ค คันทรี่ อิตาลี familymems 5
xadd ข้อมูลการท่องเที่ยว * ชื่อ แฮรี่ คันทรี่ สหรัฐอเมริกา familymems สอง
xadd ข้อมูลการท่องเที่ยว * ชื่อ นิโคมิตะ ประเทศ ญี่ปุ่น familymems 3
xadd ข้อมูลการท่องเที่ยว * ชื่อ zakaria ประเทศ อินเดีย familymems สอง
xadd ข้อมูลการท่องเที่ยว * ชื่อ เรดมันด์ ประเทศ บราซิล familymems 6
xadd ข้อมูลการท่องเที่ยว * พบชื่อประเทศ ญี่ปุ่น familymems 3
xadd ข้อมูลการท่องเที่ยว * ชื่อ maryjohn ประเทศ สหรัฐอเมริกา familymems สอง
xadd ข้อมูลการท่องเที่ยว * ชื่อ ลิซ่า ประเทศ อิตาลี familymems 5
xadd ข้อมูลการท่องเที่ยว * name nimshikaa ประเทศญี่ปุ่น familymems 3
xadd ข้อมูลการท่องเที่ยว * ชื่อ ณิชา ประเทศ อิตาลี familymems 5

ลองใช้คำสั่ง XRANGE เพื่อตรวจสอบ stream Touristinfo ดังนี้

xrange Touristinfo - +

เอาท์พุท:

ตามที่คาดไว้ คำสั่งนี้แสดงรายการสตรีม 10 รายการ

เพื่อจุดประสงค์ในการสาธิต เราจะทำการตัดแต่งสตรีมโดยให้มีความยาวสูงสุดเท่ากับ 5

xtrim Touristinfo maxlen 5

มาตรวจสอบรายการสตรีมอีกครั้งด้วยคำสั่ง XRANGE

ตามที่คาดไว้ ห้ารายการถูกขับไล่ออกจากสตรีม และมีความยาว 5 รายการ

ใช้กรณีที่ 02 – การลบรายการสตรีมตามรหัสสตรีม

มาดูตัวอย่างกันที่บริษัทสภาพอากาศติดตามข้อมูลสภาพอากาศของสถานที่ที่กำหนดโดยใช้สตรีม Redis ตอนนี้พวกเขาต้องการลบรายการเก่าที่ไม่ต้องการอีกต่อไป เราสามารถใช้คำสั่ง XTRIM โดยใช้กลยุทธ์ MINID ดังที่แสดงต่อไปนี้

ขั้นแรก เราจะสร้างสตรีมชื่อ weatherinfo และเพิ่มรายการ 5 รายการดังนี้

xadd weatherinfo * อุณหภูมิ 10 ความชื้น ห้าสิบ
xadd weatherinfo * อุณหภูมิ ยี่สิบ ความชื้น 70
xadd weatherinfo * อุณหภูมิ 12 ความชื้น 65
xadd weatherinfo * อุณหภูมิ สิบห้า ความชื้น 88
xadd weatherinfo * อุณหภูมิ 18 ความชื้น สี่ห้า

เอาท์พุท:

ลองใช้คำสั่ง XTRIM เพื่อลบรายการที่มี ID ต่ำกว่าค่าเกณฑ์ที่ระบุ

xtrim weatherinfo MINID 1660485503248 - 0

รหัสขั้นต่ำที่ระบุเชื่อมโยงกับรายการที่สาม ดังนั้น รายการหลังจากรายการที่สามซึ่งมีรหัสต่ำกว่าจะถูกลบ

เอาท์พุท:

เนื่องจากเราไม่ได้ระบุอาร์กิวเมนต์ = หรือ ~ อย่างชัดเจน คำสั่งจึงใช้ตัวดำเนินการ = โดยค่าเริ่มต้น ดังนั้นการตัดแต่งจึงเสร็จสิ้นในทั้งสองกรณีการใช้งาน หากคุณระบุโอเปอเรเตอร์ ~ ไว้อย่างชัดเจน การตัดแต่งเกือบจะเสร็จสิ้นตามที่แสดงในภาพต่อไปนี้

ดังที่แสดงในรูปด้านบน คำสั่ง XTRIM ถูกใช้กับตัวดำเนินการ ~ เราขอให้คำสั่งลบรายการทั้งหมดที่เกินความยาว 100 เนื่องจากเราไม่ได้บังคับคำสั่ง XTRIM ให้ทำการตัดแต่งที่แน่นอน มันจะเน้นที่ประสิทธิภาพของการดำเนินการตัดแต่ง ดังนั้นจะไม่ลบรายการที่เป็นของแมโครโหนดเดียวกัน จะเก็บสามรายการถัดไปที่อยู่ในโหนดมาโครเดียวกันและจะลบโหนดมาโครทั้งหมดหลังจากนั้น มันให้การปรับปรุงประสิทธิภาพเป็นจำนวนมากกว่าวิธีการตัดแต่งที่แน่นอน ซึ่งบังคับให้คำสั่งต้องใช้ความพยายามเป็นพิเศษ ขั้นตอนเดียวกันนี้เกิดขึ้นเมื่อเกณฑ์ขึ้นอยู่กับรหัสรายการ

อาร์กิวเมนต์ LIMIT จะจำกัดจำนวนรายการที่ถูกไล่ออกจากสตรีมที่ระบุ ซึ่งสามารถนำไปใช้เพื่อปรับปรุงประสิทธิภาพได้อีกเล็กน้อย

บทสรุป

กล่าวโดยย่อ คำสั่ง XTRIM ใช้เพื่อลบรายการสตรีมตามค่าเกณฑ์ ชนิดของค่าขีดจำกัดสามารถเปลี่ยนแปลงได้ด้วยบริบทที่ระบุโดยใช้อาร์กิวเมนต์คำสั่ง MAXLEN และ MINID ตามที่กล่าวไว้ การตัดแต่งสามารถทำได้สองวิธี โดยที่การดำเนินการตัดแต่งจะพิจารณาเกณฑ์เป็นขีดจำกัดที่แน่นอนหรือโดยประมาณ โดยค่าเริ่มต้น คำสั่งจะใช้ตัวดำเนินการ = ที่ใช้สำหรับการตัดแต่งที่แน่นอน ด้วยตัวดำเนินการ ~ คุณสามารถทำการตัดแต่งโดยประมาณตามที่กล่าวไว้ในส่วนด้านบน โดยรวม วิธีการตัดแต่งโดยประมาณและอาร์กิวเมนต์ LIMIT ช่วยให้คุณได้รับประสิทธิภาพที่เพิ่มขึ้นอย่างมากด้วยคำสั่ง XTRIM