ในบทเรียนนี้ เราจะเรียนรู้วิธีการลบและส่งคืนสมาชิกที่มี Score สูงสุดของค่า Sorted Set ที่จัดเก็บที่ Key ใน Redis Datastore โดยใช้คำสั่ง Redis ZPOPMAX และ BZPOPMAX
คำสั่ง ZPOPMAX
คำสั่งนี้ลบและส่งคืนสมาชิกที่มี Score สูงสุด 1 หรือหลายรายการ จากค่า Sorted Set ที่จัดเก็บที่ Key ที่ระบุ คำสั่งรับอาร์กิวเมนต์ count ซึ่งแสดงจำนวนสมาชิกทั้งหมดที่จะถูกลบจากค่า Sorted Set หากไม่ระบุ ค่าเริ่มต้นของ count คือ 1 เมื่อส่งคืนสมาชิก สมาชิกที่มี Score สูงสุดจะอยู่ลำดับแรก ตามด้วยสมาชิกที่มี Score ต่ำกว่า
จะส่งคืน Error หาก Key มีอยู่แต่ค่าที่จัดเก็บที่ Key ไม่ใช่ชนิดข้อมูล Sorted Set และส่งคืน Nil หาก Key ไม่มีอยู่
ไวยากรณ์ของคำสั่ง Redis ZPOPMAX มีดังนี้ :-
ไวยากรณ์ (Syntax) :-
redis host:port> ZPOPMAX <keyname> <count>
ผลลัพธ์ (Output) :-
- (array) reply, แสดงสมาชิกและ Score ของ Sorted Set - (nil), หาก Key ไม่มีอยู่ - Error, หาก Key มีอยู่และค่าที่จัดเก็บที่ Key ไม่ใช่ Sorted Set
ตัวอย่าง (Example) :-

คำสั่ง BZPOPMAX
คำสั่งนี้เป็น Blocking version ของคำสั่ง ZPOPMAX เนื่องจากมันจะ Block การทำงานเมื่อไม่มีสมาชิกให้ Pop จาก Sorted Set ใดๆ ที่ระบุ กล่าวคือ มัน Block เมื่อ Sorted Set ที่ระบุทั้งหมดว่างเปล่าหรือ Key ที่ระบุทั้งหมดไม่มีอยู่
มันลบและส่งคืนสมาชิกที่มี Score สูงสุดจาก Sorted Set ที่ไม่ว่างเปล่าแรก โดยตรวจสอบ Key ที่ระบุจากซ้ายไปขวา ดังนั้น เช่น หากคำสั่ง BZPOPMAX set1 set2 set3 0 ถูก Execute โดยที่ Key set1 ไม่มีอยู่ (ถือว่าเป็น Empty Set) set2 เป็น Empty Set และ set3 มี 3 สมาชิก มันจะลบและส่งคืนสมาชิกที่มี Score สูงสุดของค่า Sorted Set ที่จัดเก็บที่ set3 เนื่องจากมันเป็น Set แรกที่ไม่ว่าง เมื่อตรวจสอบจาก set1 ถึง set3
คำสั่งนี้รับอาร์กิวเมนต์ timeout (integer) ซึ่งแสดงจำนวนวินาทีสูงสุดที่จะ Block Timeout เป็นศูนย์สามารถใช้เพื่อ Block เป็นเวลาอันสิ้นสุดไม่ได้
ไวยากรณ์ของคำสั่ง Redis BZPOPMAX มีดังนี้ :-
ไวยากรณ์ (Syntax) :-
redis host:port> BZPOPMAX <keyname> [ <keyname> ] <timeout>
ผลลัพธ์ (Output) :-
- (array) reply, ส่งคืน 3 องค์ประกอบ โดยองค์ประกอบแรกคือชื่อ Key ของ Sorted Set องค์ประกอบที่สองคือ Score ของสมาชิกที่ Pop ออก และองค์ประกอบที่สามคือสมาชิกที่ Pop ออกเอง - (nil), เมื่อไม่มีสมาชิกให้ Pop และ Timeout หมดอายุ
ตัวอย่าง (Example) :-

อ้างอิง (References) :-
- ZPOPMAX Command Docs
- BZPOPMAX Command Docs
ขอจบบทเรียนเรื่องวิธีลบและส่งคืนสมาชิกที่มี Score สูงสุดของค่า Sorted Set ที่จัดเก็บใน Redis Datastore หากชอบ กรุณาแชร์ความคิดเห็นในส่วนความคิดเห็นและแชร์ให้คนอื่นๆ ด้วยนะครับ