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

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

อ้างอิง (References) :-
- RPOPLPUSH Command Docs
- BRPOPLPUSH Command Docs
หากชอบ กรุณาแชร์ความคิดเห็นในส่วนความคิดเห็นและแชร์ให้คนอื่นๆ ด้วยนะครับ