ที่เก็บข้อมูลการกำหนดค่า

ที่เก็บข้อมูลการกำหนดค่า Storage เป็นที่เก็บข้อมูลแบบ key-value ที่มีในตัวของ FIRERPA ซึ่งมีความสามารถในการคงอยู่ถาวร (persistence) แม้ว่า FIRERPA หรืออุปกรณ์จะรีสตาร์ท คุณยังคงสามารถอ่านค่าตัวแปรเหล่านี้ได้ในการเปิดใช้งานครั้งถัดไป Storage นี้ช่วยให้คุณสามารถจัดเก็บข้อมูลอย่างถาวรในอุปกรณ์เพื่อให้โปรเซสของไคลเอ็นต์ต่างๆ สามารถอ่านได้ เพื่อใช้ในการแชร์การกำหนดค่าของอุปกรณ์ เช่น บัญชีล็อกอิน หรือข้อมูลอิสระอื่นๆ คุณยังสามารถจัดเก็บการกำหนดค่าที่เข้ารหัสไว้ในเครื่องได้อีกด้วย

ข้อควรสนใจ

ที่เก็บข้อมูล Storage ในตัวมีความจุทั้งหมด 128MB โปรดอย่าใช้เพื่อเก็บข้อมูลจำนวนมาก ไม่รองรับการแสดงรายชื่อคอนเทนเนอร์หรือชื่อคีย์ที่มีอยู่ในที่เก็บข้อมูล คุณต้องทราบชื่อคอนเทนเนอร์และชื่อคีย์ทั้งหมดจึงจะสามารถอ่านค่าจากคอนเทนเนอร์ได้ มิฉะนั้นจะไม่สามารถอ่านได้เลย

การเข้าถึง Storage

คุณสามารถใชโค้ดต่อไปนี้เพื่อเข้าถึงอ็อบเจกต์ที่เก็บข้อมูล Storage เพื่อที่จะดำเนินการในขั้นตอนต่อไปได้

storage = d.stub("Storage")

การล้างข้อมูลใน Storage

คุณสามารถใช้โค้ดต่อไปนี้เพื่อล้างข้อมูลทั้งหมดในที่เก็บข้อมูล Storage รวมถึงคอนเทนเนอร์ทั้งหมด ซึ่งอาจเปรียบได้กับการฟอร์แมต Storage

storage.clear()

การเข้าถึงคอนเทนเนอร์

คุณสามารถใช้โค้ดต่อไปนี้เพื่อเข้าถึงอ็อบเจกต์คอนเทนเนอร์สำหรับเก็บข้อมูลแบบ key-value ที่เก็บข้อมูล (Storage) ก็คือที่เก็บข้อมูล ส่วนคอนเทนเนอร์ (container) ก็เปรียบเสมือนบัคเก็ต (bucket) ที่อยู่ภายใต้ที่เก็บข้อมูลนั้น การอ่านและเขียนข้อมูลของคุณในขั้นตอนต่อไปจะเป็นการดำเนินการกับบัคเก็ตนี้

container = storage.use("container_name")

การเข้าถึงคอนเทนเนอร์ที่เข้ารหัส

หากคุณต้องการจัดเก็บค่าอย่างปลอดภัย เช่น ในกรณีที่อุปกรณ์นี้จะถูกใช้งานโดยผู้อื่น แต่คุณไม่ต้องการให้การกำหนดค่าที่คุณเก็บไว้ถูกอ่านโดยผู้อื่น คุณสามารถใช้คอนเทนเนอร์ที่เข้ารหัสได้ ซึ่งแตกต่างจากการเข้าถึงคอนเทนเนอร์ทั่วไป คอนเทนเนอร์ที่เข้ารหัสจะทำการเข้ารหัส key-value ที่คุณตั้งค่าไว้ก่อนจัดเก็บ ผู้อื่นจะต้องใช้รหัสผ่านหรือการยืนยันตัวตนอื่น ๆ จึงจะสามารถอ่านข้อมูลได้อย่างถูกต้อง

ไลบรารีของเรามาพร้อมกับ FernetCryptor สำหรับการเข้ารหัสและถอดรหัส คุณยังสามารถสร้างอัลกอริทึมการเข้ารหัสเฉพาะของคุณเองตามแบบของ FernetCryptor ได้ เพียงแค่คุณต้อง implement เมธอด encrypt และ decrypt

from lamda.client import FernetCryptor
container = storage.use("container_name", cryptor=FernetCryptor,
                                          key="this_is_password")

การลบคอนเทนเนอร์

คุณสามารถใช้โค้ดต่อไปนี้เพื่อล้าง key-value ทั้งหมดที่เก็บอยู่ในคอนเทนเนอร์ชื่อ container_name การดำเนินการนี้เทียบเท่ากับการลบบัคเก็ตทิ้ง

storage.remove("container_name")

การเขียน Key-Value ลงในคอนเทนเนอร์

คุณสามารถเรียกใช้ตัวอย่างต่อไปนี้เพื่อตั้งค่าของ key_name เป็น "value" โดยที่ค่า (value) สามารถเป็นตัวแปรชนิดใดก็ได้ที่สามารถ serialize ด้วย msgpack ได้

container.set("key_name", [1, 2, 3])
container.set("key_name", {"john": "due"})
container.set("key_name", b"value")
container.set("key_name", "value")

การอ่าน Key-Value จากคอนเทนเนอร์

คุณสามารถใช้วิธีต่อไปนี้เพื่อดึงค่าของ key_name หากไม่มีอยู่ จะคืนค่า None

container.get("key_name")

การรับเวลาคงอยู่ (TTL)

คุณสามารถเรียกใช้คำสั่งต่อไปนี้เพื่อรับเวลาคงอยู่ (TTL) ของ key_name โดยที่ -2 หมายถึงคีย์ไม่มีอยู่, -1 หมายถึงไม่มีวันหมดอายุ, และจำนวนเต็มบวกอื่น ๆ คือจำนวนวินาทีที่เหลืออยู่ของคีย์นั้น

container.ttl("key_name")

การตั้งค่าเวลาคงอยู่ (TTL)

คุณสามารถเรียกใช้คำสั่งต่อไปนี้เพื่อตั้งค่าเวลาคงอยู่ของ key-value ตัวอย่างเช่น การเรียกใช้ด้านล่างนี้จะตั้งค่า key-value พร้อมกับทำให้ key-value นี้ถูกลบโดยอัตโนมัติหลังจากผ่านไป 10 วินาที

container.setex("key_name", "value", 10)

หรือหากคุณได้ตั้งค่าคีย์นี้ไว้ก่อนแล้ว และตอนนี้ต้องการตั้งเวลาคงอยู่ให้มัน คุณสามารถใช้คำสั่งด้านล่างนี้ได้ หลังจาก 60 วินาที key_name จะถูกลบโดยอัตโนมัติ

container.expire("key_name", 60)

การเขียนตามเงื่อนไข

คุณสามารถเรียกใช้คำสั่งด้านล่างนี้ ซึ่งจะทำการตั้งค่า key-value ก็ต่อเมื่อ key_name ยังไม่มีอยู่เท่านั้น หากมีอยู่แล้ว จะไม่มีการดำเนินการใด ๆ

container.setnx("key_name", "value")

การตรวจสอบว่ามีอยู่หรือไม่

คุณสามารถเรียกใช้คำสั่งด้านล่างนี้เพื่อตรวจสอบว่า key_name มีอยู่ในคอนเทนเนอร์หรือไม่

container.exists("key_name")

การลบ Key-Value ออกจากคอนเทนเนอร์

คุณสามารถเรียกใช้คำสั่งด้านล่างนี้เพื่อลบ key_name และค่าของมันออกจากคอนเทนเนอร์

container.delete("key_name")