Skip to content

键值存储

rev1si0n edited this page Oct 1, 2023 · 1 revision

键值存储 Storage 是 LAMDA 内置的键值存储,它具有持久性,即使 LAMDA 重启,你依然可以在下次 LAMDA 启动时读取这些变量。该 Storage 让你可以在设备中持久化存储信息以供不同的 client API 进程读取。

注: Storage 的总容量为 128MB,请勿用来存储大量数据。

# 获取一个 Storage 对象
storage = d.stub("Storage")

# 清空 Storage 中的所有信息(包括容器)
storage.clear()

# 清除名为 container_name 的容器中存储的所有键值
storage.remove("container_name")

# 获取一个键值容器对象
container = storage.use("container_name")

# 存储在 Storage 中的 key_name 和 container_name 是安全的
# 无法通过任何方式读取原始字符串,你必须完整知道容器名称以及 key 才能从容器中读取数据
# 如果还需要安全的存储值,比如,当该设备会被其他人使用,但是你不想存储的配置被其他人读取,
# 可参照以下示例提供加解密方法,这样即使被非法访问,非预期访问者也无法解密容器中存储的任何明文信息
from lamda.client import FernetCryptor
# 获取键值容器对象,对该容器的读写均通过 FernetCryptor 加解密
# 当然,你也可以参照 FernetCryptor 自己编写加解密流程,只需要实现 encrypt, decrypt 方法即可
container = storage.use("container_name", cryptor=FernetCryptor,
                                          key="this_is_password")

# 获取 key_name 的值(如果不存在,则返回 None)
container.get("key_name")

# 获取 key_name 的生存时间(-2 为该键不存在,-1 为无限生存时间)
# 其他正整数则为该 key 的剩余存活秒数
container.ttl("key_name")

# 设置 key_name 的值为 "value",并且 10 秒后自动删除
container.setex("key_name", "value", 10)

# 设置 key_name 的生存时间为 60 秒
# 60 秒后,该键值将自动被删除
container.expire("key_name", 60)

# 仅当 key_name 不存在时设置该键值
container.setnx("key_name", "value")

# 设置 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 是否存在于容器中
container.exists("key_name")
# 删除 key_name
container.delete("key_name")
Clone this wiki locally