Хранилище ключей и значений¶
Хранилище конфигурации Storage — это встроенное в FIRERPA хранилище типа «ключ-значение». Оно обладает персистентностью: даже после перезапуска FIRERPA или устройства вы сможете прочитать эти переменные при следующем запуске. Storage позволяет постоянно хранить информацию на устройстве, чтобы её могли читать различные клиентские процессы, например для совместного использования конфигурации устройства, такой как учётные данные для входа или другие отдельные сведения. Вы даже можете хранить на устройстве зашифрованную конфигурацию.
Внимание
Встроенное хранилище Storage имеет общий объём 128 МБ. Не используйте его для хранения больших объёмов данных. Список имён контейнеров или ключей в хранилище не поддерживается; вы должны точно знать имя контейнера и имя ключа, чтобы прочитать значение из контейнера, иначе прочитать его будет невозможно.
Получение 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")