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

คำสั่ง BLPOP
คำสั่งนี้เป็น Blocking version ของคำสั่ง LPOP เนื่องจากมันจะ Block การทำงานเมื่อไม่มีสมาชิกให้ Pop จาก List ใดๆ ที่ระบุ กล่าวคือ มัน Block เมื่อ List ที่ระบุทั้งหมดว่างเปล่าหรือ Key ที่ระบุทั้งหมดไม่มีอยู่
มันลบและส่งคืนสมาชิกแรกของ List ที่ไม่ว่างเปล่า โดยตรวจสอบ Key ที่ระบุจากซ้ายไปขวา ดังนั้น เช่น หากคำสั่ง BLPOP list1 list2 list3 0 ถูก Execute โดยที่ Key list1 ไม่มีอยู่ (ถือว่าเป็น Empty List) list2 เป็น Empty List และ list3 มี 3 สมาชิก มันจะลบและส่งคืนสมาชิกแรกของค่า List ที่จัดเก็บที่ list3 เนื่องจากมันเป็น List แรกที่ไม่ว่าง เมื่อตรวจสอบจาก list1 ถึง list3
หาก Key ที่ระบุใดๆ ไม่มีอยู่ หรือค่า List ของ Key นั้นว่างเปล่า BLPOP จะ Block การทำงานจนกว่า Client อื่นจะ Execute คำสั่งอย่าง LPUSH, RPUSH, และ LINSERT เพื่อแทรกสมาชิกใน Key ที่ระบุอย่างน้อย 1 ตัว เมื่อมีสมาชิกใหม่อยู่บน List Value ใดๆ Client จะส่งคืนพร้อมชื่อ Key ที่ Unblock และค่าที่ Pop ออก
เมื่อ BLPOP ทำให้ Client Block และระบุ Timeout ที่ไม่เป็นศูนย์ Client จะ Unblock ส่งคืน Nil เมื่อ Timeout ที่ระบุหมดอายุโดยไม่มีการแทรกสมาชิกติด Key ที่ระบุอย่างน้อย 1 ตัว
อาร์กิวเมนต์ Timeout เป็นค่า Integer แสดงจำนวนวินาทีสูงสุดที่จะ Block Timeout 0 วินาทีสามารถใช้เพื่อ Block เป็นเวลาอันสิ้นสุดไม่ได้
ไวยากรณ์ของคำสั่ง Redis BLPOP มีดังนี้ :-
ไวยากรณ์ (Syntax) :-
redis host:port> BLPOP <keyname-1> [ <keyname> ] <timeout>
ผลลัพธ์ (Output) :-
- (array) reply, ส่งคืน 2 องค์ประกอบ โดยองค์ประกอบแรกคือชื่อ Key ของสมาชิกที่ Pop องค์ประกอบที่สองคือสมาชิกที่ Pop เอง - (nil), เมื่อไม่มีสมาชิกให้ Pop และ Timeout หมดอายุ
ตัวอย่าง (Example) :-

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