内部配置存储器

内部配置存储器 Storage 是 LAMDA 内置的键值存储,他具有持久性,即使 LAMDA 或者设备重启,您依然可以在下次 LAMDA 启动时读取这些变量。该 Storage 让您可以在设备中持久化存储信息以供不同的客户端 API 调用进程读取,用以共享单独的设备配置,比如设备上登录的账号或者其他信息。您甚至可以在机器内存储加密配置。

注意:内置 Storage 的总容量为 128MB,请勿用来存储大量数据,我们不支持列出存储器中存在的容器名或者键名等信息,您必须完整知道容器名称以及键的名称才能从容器中读取数据。

获取 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 为永不过期,其他正整数则为该 key 的剩余存活秒数。

container.ttl("key_name")

设置生存时间

您可以通过如下调用,设置键值的生成时间,比如,下面的调用方式,将会在设置键值的同时,使这个键值在 10 秒后自动被删除。

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

或者,如果您之前已经设置过这个键,现在想为其设置生存时间,可以下面这样使用,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")