キー・バリュー・ストア

設定ストレージ 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")

有効期限(TTL)の取得

key_name の有効期限を取得します。-2 はキーが存在しないこと、-1 は期限切れにならないこと、その他の正の整数はキーの残り生存秒数を示します。

container.ttl("key_name")

有効期限(TTL)の設定

キー値の有効期限を設定します。たとえば、以下の呼び出しでは、キー値を設定すると同時に、そのキー値を 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")