Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Redis

ดึงสมาชิกที่มี Score สูงสุดจาก Redis Sorted Set ด้วย ZPOPMAX และ BZPOPMAX

ในบทเรียนนี้ เราจะเรียนรู้วิธีการลบและส่งคืนสมาชิกที่มี 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) :-

ดึงสมาชิกที่มี Score สูงสุดจาก Redis Sorted Set ด้วย ZPOPMAX และ BZPOPMAX

คำสั่ง 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) :-

ดึงสมาชิกที่มี Score สูงสุดจาก Redis Sorted Set ด้วย ZPOPMAX และ BZPOPMAX

อ้างอิง (References) :-

  1. ZPOPMAX Command Docs
  2. BZPOPMAX Command Docs

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