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

ย้ายรายการระหว่าง Redis List อย่างมีประสิทธิภาพด้วย RPOPLPUSH และ BRPOPLPUSH

ในบทเรียนนี้ เราจะเรียนรู้วิธีการลบและส่งคืนสมาชิกสุดท้ายของค่า List ที่จัดเก็บที่ Key หนึ่ง และแทรกสมาชิกเดียวกันที่ตำแหน่งแรกของค่า List ที่จัดเก็บที่ Key อีกตัวหนึ่งใน Redis Datastore โดยใช้คำสั่ง Redis RPOPLPUSH และ BRPOPLPUSH

คำสั่ง RPOPLPUSH

คำสั่งนี้ใช้ลบและส่งคืนสมาชิกจาก Tail (ปลาย) ของค่า List ที่จัดเก็บที่ Source Key และแทรกสมาชิกเดียวกันที่ Head (หัว) ของค่า List ที่จัดเก็บที่ Destination Key หาก Source Key ไม่มีอยู่ จะส่งคืน Nil และไม่ดำเนินการใดๆ หาก Destination Key ไม่มีอยู่ จะถูกสร้างเป็น Empty List ก่อนทำการแทรก

หาก Source และ Destination Key เป็น Key เดียวกัน การดำเนินการนี้จะเหมือนกับการหมุนเวียน (Rotate) สมาชิกใน List ไวยากรณ์ของคำสั่ง Redis RPOPLPUSH มีดังนี้:-

ไวยากรณ์ (Syntax) :-

redis host:port> RPOPLPUSH <keyname-source> <keyname-destination>

ผลลัพธ์ (Output) :-

- (string) reply, แสดงสมาชิกที่ Pop จาก Source List - (nil), หาก Source Key ไม่มีอยู่ - Error, หาก Source หรือ Destination Key มีอยู่และค่าที่จัดเก็บไม่ใช่ List 

ตัวอย่าง (Example) :-

ย้ายรายการระหว่าง Redis List อย่างมีประสิทธิภาพด้วย RPOPLPUSH และ BRPOPLPUSH

คำสั่ง BRPOPLPUSH

คำสั่งนี้เป็น Blocking version ของคำสั่ง RPOPLPUSH เนื่องจากมันจะ Block การทำงานเมื่อไม่มีสมาชิกให้ Pop จาก Source List กล่าวคือ มัน Block เมื่อค่า List ที่ Source Key ว่างเปล่าหรือ Source Key ไม่มีอยู่

เมื่อ Client อื่น Execute คำสั่งอย่าง LPUSH, RPUSH, และ LINSERT เพื่อแทรกสมาชิกใน Source List Value Client จะถูก Unblock เพื่อดำเนินการ RPOPLPUSH

เมื่อระบุ Timeout ที่ไม่เป็นศูนย์ และ Timeout หมดอายุโดยไม่มีการแทรกสมาชิกติด Source Key Client จะถูก Unblock ส่งคืนค่า Null

อาร์กิวเมนต์ Timeout เป็นค่า Integer แสดงจำนวนวินาทีสูงสุดที่จะ Block Timeout 0 วินาทีสามารถใช้เพื่อ Block เป็นเวลาอันสิ้นสุดไม่ได้

ไวยากรณ์ของคำสั่ง Redis BRPOPLPUSH มีดังนี้:-

ไวยากรณ์ (Syntax) :-

redis host:port> BRPOPLPUSH <keyname-source> <keyname-destination> <timeout>

ผลลัพธ์ (Output) :-

- (string) reply, แสดงสมาชิกที่ Pop จาก Source List - (nil) reply, เมื่อไม่มีสมาชิกให้ Pop และ Timeout หมดอายุ

ตัวอย่าง (Example) :-

ย้ายรายการระหว่าง Redis List อย่างมีประสิทธิภาพด้วย RPOPLPUSH และ BRPOPLPUSH

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

  1. RPOPLPUSH Command Docs
  2. BRPOPLPUSH Command Docs

หากชอบ กรุณาแชร์ความคิดเห็นในส่วนความคิดเห็นและแชร์ให้คนอื่นๆ ด้วยนะครับ

<- List Commands