โดยปกติ คำสั่ง GET และ SET จะใช้ในการจัดเก็บและดึงค่าประเภทสตริงที่เก็บอยู่ในคีย์ Redis ที่กำหนด คำสั่งทั้งสองนี้ทำงานด้วยความซับซ้อนของเวลาคงที่
นอกจากนี้ คำสั่ง GETEX ยังสามารถอ่านค่าสตริงที่เก็บอยู่ในคีย์ที่กำหนดได้ แต่คำสั่งนี้เกี่ยวข้องกับการดำเนินการเขียนแบบขนานเช่นกัน คู่มือนี้จะเน้นที่ไวยากรณ์คำสั่ง GETEX ตัวเลือก และกรณีการใช้งาน
TTL ของ Redis Key
ค่า time to live (TTL) คือเวลาหมดอายุของข้อมูลที่กำหนด โดยปกติ TTL สามารถเชื่อมโยงกับแถวฐานข้อมูลได้ ระยะหมดเวลาสามารถตั้งค่าได้ด้วยปุ่ม Redis เช่นกัน ดังนั้น ไคลเอนต์ Redis สามารถตรวจสอบวินาทีที่เหลือว่าคีย์ที่ระบุจะพร้อมใช้งานในที่เก็บข้อมูล Redis เสนอคำสั่ง TTL เพื่อตรวจสอบค่าเวลาที่ใช้จริงของคีย์ที่กำหนด หากไม่มีการหมดเวลาเชื่อมโยงกับคีย์ที่ระบุ คำสั่ง TTL จะส่งกลับ -1 เราจะใช้คำสั่ง TTL ในหัวข้อถัดไปเพื่อตรวจสอบเวลาที่เหลืออยู่ของคีย์ที่กำหนด
คำสั่ง GETEX
ตามที่ไฮไลต์ คำสั่ง GETEX จะคล้ายกับคำสั่ง GET มากกว่า ยกเว้นว่าสามารถใช้เพื่อตั้งเวลาหมดอายุสำหรับคีย์ที่ระบุได้ นอกจากนี้ ตัวเลือกคำสั่งสามารถลบค่าการหมดเวลาออกจากคีย์ที่กำหนดได้ ไวยากรณ์คำสั่ง GETEX มีดังนี้:
คีย์ GETEX [ EX timeout_in_seconds | PX timeout_in_มิลลิวินาที | กทพ. timeout_in_unix-time-seconds | PXAT timeout_in_unix-time-มิลลิวินาที | ถาวร ]
กุญแจ: นี่คือคีย์ที่ชี้ไปที่ค่าสตริง
อาร์กิวเมนต์ที่เป็นตัวเลือกต่อไปนี้สามารถใช้เพื่อตั้งค่าการหมดเวลาเป็นวินาทีหรือมิลลิวินาที
อดีต: การดำเนินการนี้จะกำหนดเวลาหมดอายุเป็นวินาทีสำหรับคีย์ที่ระบุ
พิกเซล: ค่าระยะหมดเวลาของคีย์จะถูกตั้งค่าเป็นมิลลิวินาที
นอกจากนี้ เราสามารถระบุค่าประทับเวลาของ UNIX เป็นวินาทีหรือมิลลิวินาทีโดยใช้ตัวเลือกคำสั่งต่อไปนี้ กทพ และ PXAT :
กทพ. เวลาหมดอายุจะถูกตั้งค่าในรูปแบบการประทับเวลา UNIX และการประทับเวลาจะเป็นวินาที
PXAT: ระยะหมดเวลาสำหรับคีย์ Redis ที่กำหนดจะถูกตั้งค่าเป็นการประทับเวลา UNIX ในหน่วยมิลลิวินาที
ถาวร: โดยการระบุสิ่งนี้ คุณสามารถลบค่า time to live ที่เชื่อมโยงกับคีย์ที่ระบุได้
คำสั่ง GETEX ส่งคืนค่าของคีย์ที่ระบุ คำสั่งนี้ใช้ได้เฉพาะกับค่าประเภทสตริงเท่านั้น แต่ใช้ไม่ได้กับแฮช รายการ ชุดที่จัดเรียง ฯลฯ หากคุณระบุคีย์ที่เกี่ยวข้องกับค่าที่ไม่ใช่สตริง คำสั่งจะส่งคืนข้อผิดพลาด นอกจากนี้ หากคีย์หมดอายุแล้วหรือไม่มีอยู่ คำสั่งจะส่งคืน ไม่มี
ในส่วนต่อไปนี้ เราจะพูดถึงการใช้งานจริงของคำสั่ง GETEX
กรณีใช้งาน — ลิงก์รีเซ็ตชั่วคราวหรือการสร้างรหัส PIN สำหรับการกู้คืนรหัสผ่าน/OTP
บริษัทเว็บโฮสติ้งกำลังจัดเตรียมคุณลักษณะการกู้คืนรหัสผ่านสำหรับผู้ใช้ที่ลงทะเบียน เพื่อเป็นมาตรการรักษาความปลอดภัย พวกเขาส่งลิงค์ URL ใหม่ไปยังผู้ใช้ ซึ่งจะหมดอายุภายใน 5 นาที บริษัทใช้ที่เก็บข้อมูล Redis มาเป็นเวลานานแล้ว และใช้คำสั่ง GETEX เพื่อตั้งค่าเวลาสดสำหรับผู้ใช้ที่กำหนด
สมมติว่าผู้ใช้ที่มี user_id 1000 ขอกู้คืนรหัสผ่าน ดังนั้น URL การกู้คืนสามารถเก็บไว้ที่คีย์ RecoveryURL:UserID:1000 . เราสามารถใช้คำสั่ง SET เพื่อจัดเก็บ URL การกู้คืนได้ดังนี้:
ชุด RecoveryURL:UserID: 1000 'https://abc.com/recovery/userid=1000,key=sdfiuoe3290e9rjs'มาตรวจสอบว่า URL สตริงถูกเก็บไว้อย่างถูกต้องที่คีย์ RecoveryURL:UserID:1000. เราสามารถใช้คำสั่ง GETEX ได้ดังนี้:
getex RecoveryURL: รหัสผู้ใช้: 1000ผลลัพธ์ของคำสั่งก่อนหน้าจะแสดงดังต่อไปนี้:
หากเราใช้คำสั่ง GET แทนคำสั่ง GETEX ผลลัพธ์จะเหมือนกัน
ลองใช้คำสั่ง TTL เพื่อตรวจสอบว่าเวลาหมดอายุเชื่อมโยงกับคีย์นี้หรือไม่
Ttl RecoveryURL: รหัสผู้ใช้: 1000
ตามที่คาดไว้ -1 ถูกส่งกลับโดยคำสั่ง TTL ซึ่งหมายความว่าไม่มีเวลาหมดอายุที่เกี่ยวข้องกับคีย์ที่ระบุ
ตามตัวอย่างนี้ บริษัทโฮสติ้งจำเป็นต้องตั้งค่าการหมดเวลา 5 นาทีสำหรับ URL การกู้คืน ดังนั้น เราจะใช้ อดีต ตัวเลือกคำสั่ง เนื่องจาก 5 นาทีคือ 300 วินาที เราจึงสามารถสร้างคำสั่ง GETEX ได้ดังนี้:
getex RecoveryURL: รหัสผู้ใช้: 1000 อดีต 500ให้เรียกใช้คำสั่ง TTL สองสามครั้งเพื่อตรวจสอบเวลาที่เหลืออยู่ที่คีย์จะมีอยู่ในที่เก็บข้อมูล
ตามคาด เวลาก็ลดลง และในที่สุด RecoveryURL:UserID:1000 กุญแจจะถูกลบออก ต่อไปนี้เป็นผลลัพธ์หลังจาก 5 นาที:
-2 ถูกส่งคืนโดยคำสั่ง ซึ่งหมายความว่าคีย์หมดอายุและถูกลบออกจากที่เก็บข้อมูล
บางครั้ง คุณอาจต้องลบค่าการหมดเวลาที่เกี่ยวข้องกับคีย์ที่ระบุ ดังนั้น สามารถใช้ตัวเลือกคำสั่ง PERSIST เพื่อลบค่า TTL ที่เกี่ยวข้องกับคีย์ที่ระบุ
มาสร้างคีย์ตัวอย่างอื่นและกำหนดค่าสตริงให้กับคีย์ดังกล่าว ในกรณีนี้ เราจะระบุค่า TTL ในหน่วยมิลลิวินาทีโดยส่งผ่าน PX ตัวเลือก.
ชุด KeytoTestPersist 'สิ่งนี้จะหมดอายุภายใน 60 วินาที' PX 50000ต่อไปเราจะตรวจสอบเวลาที่เหลือดังนี้:
ตามที่คาดไว้ TTL กำลังลดลง มาเรียกคำสั่ง GETEX ด้วยตัวเลือก PERSIST ดังนี้:
getex KeytoTestPersist ยังคงอยู่เป็นการดีที่จะลบ TTL ที่เชื่อมโยงกับคีย์นี้ มาตรวจสอบ TTL สำหรับกุญแจกัน KeytoTestPersist.
คำสั่ง TTL ส่งคืน -1 ซึ่งหมายความว่าไม่มี TTL ที่เชื่อมโยงกับคีย์ KeytoTestPersist.
ในทำนองเดียวกัน GETEX คำสั่งสามารถใช้เพื่อตั้งเวลาหมดอายุสำหรับคีย์ในการประทับเวลา UNIX
บทสรุป
โดยสรุป คำสั่ง Redis GETEX สามารถใช้เพื่อดึงค่าสตริงที่เก็บไว้ที่คีย์ที่กำหนดตามที่คำสั่ง GET ทำ ข้อแตกต่างเพียงอย่างเดียวกับคำสั่ง GETEX คือสนับสนุนการตั้งค่าและการลบเวลาหมดอายุสำหรับคีย์ที่กำหนด รองรับอาร์กิวเมนต์ที่เป็นทางเลือกหลายตัวเพื่อระบุเวลาหมดอายุเป็นวินาที มิลลิวินาที และ UNIX-timestamp วินาทีหรือมิลลิวินาที ตามที่กล่าวไว้ คำสั่งให้ตัวเลือก PERSIST เพื่อลบ TTL ที่เกี่ยวข้องสำหรับคีย์ที่กำหนด โดยรวมแล้ว คำสั่ง GETEX ทำงานด้วยความซับซ้อนของเวลาคงที่