Redis GETEX

Redis Getex



Redis เป็นที่เก็บข้อมูลคีย์-ค่าที่ใช้เป็นแคชในหน่วยความจำ ฐานข้อมูล อนุกรมเวลา เอ็นจิ้นการสตรีม ตัวรับส่งข้อความ ฯลฯ เนื่องจากที่เก็บข้อมูล Redis ใช้รูปแบบคู่คีย์-ค่าอย่างง่ายในการเก็บข้อมูล จึงเป็นหน่วยความจำที่มาก มีประสิทธิภาพ. นอกจากนี้ ความเร็วในการสืบค้นยังสูงมากด้วยความซับซ้อนของเวลาต่ำ เช่น O(1) และ O(log(N)) คีย์ Redis สามารถเก็บโครงสร้างข้อมูลที่แตกต่างกันได้ เช่น สตริง ชุด แฮช ชุดที่จัดเรียง และรายการ

โดยปกติ คำสั่ง 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 ทำงานด้วยความซับซ้อนของเวลาคงที่