鍵值儲存

設定儲存器 Storage 是 FIRERPA 內置的鍵值儲存,具有持續性,即使 FIRERPA 或者裝置重新啟動,您依然可以在下次啟動時讀取這些變數。該 Storage 讓您可以在裝置中持續儲存資訊以供不同的客戶端程序讀取,用以共享裝置設定如登錄帳號或者其他獨立資訊。您甚至可以在機器內儲存加密設定。

注意

內置 Storage 總容量為 128 MB,請勿用來儲存大量資料,不支援列出儲存器中的容器名稱或鍵名,您必須完整知道容器名稱以及鍵的名稱才能從容器中讀取值,否則,將永遠無法讀取。

取得 Storage

首先取得一個儲存器 Storage 物件,這樣您才可以進行後續操作。

storage = d.stub("Storage")

清空 Storage

清空儲存器 Storage 中的所有資訊,包括容器,您可以簡單理解為 —— 格式化 Storage。

storage.clear()

取得容器

取得一個鍵值儲存容器物件,儲存器是儲存器,容器是儲存器下的一個桶,您後續的讀寫均是對這個桶進行操作。

container = storage.use("container_name")

取得加密容器

如果還需要安全地儲存值,比如,當該裝置會被其他人使用時,而您不想儲存的設定被其他人讀取,您可以使用加密容器。它與簡單的取得容器不同,加密容器將對您設定的鍵值進行加密儲存,其他人需要密碼或其他驗證才能讀取。

我們的庫自帶了一個 FernetCryptor 加解密器,您也可以按照 FernetCryptor 實作自己獨特的加密演算法,只需要您實作 encrypt 和 decrypt 方法即可。

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

刪除容器

清除名為 container_name 的容器中儲存的所有鍵值,這一操作也相當於把桶刪除。

storage.remove("container_name")

向容器寫入鍵值

設定 key_name 的值為 “value”,其中,值支援任何 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_name 的值,如果鍵不存在,則返回 None。

container.get("key_name")

取得存活時間

取得 key_name 的存活時間,-2 為該鍵不存在,-1 為永不過期,其他正整數則為該鍵的剩餘存活秒數。

container.ttl("key_name")

設定存活時間

設定鍵值的存活時間,比如下面的呼叫將會在設定鍵值的同時,使該鍵值在 10 秒後自動刪除。

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

或者,如果您之前已經設定過這個鍵,現在想為其設定存活時間,可以使用 expire,60 秒後,key_name 將自動刪除。

container.expire("key_name", 60)

條件寫入

僅當 key_name 不存在時才會設定該鍵值,如果該鍵已存在,則不做任何操作。

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

判斷是否存在

檢查 key_name 是否存在於容器中。

container.exists("key_name")

從容器刪除鍵值

來從容器中刪除 key_name 以及它的值。

container.delete("key_name")