内部配置存储器¶
内部配置存储器 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")