PickleDB:轻量级的 Python 键值存储
PickleDB:轻量级的 Python 键值存储
在 Python 生态里,做数据持久化的方案很多。Redis 快但要额外部署服务,SQLite 可靠但写起来有一定门槛。如果你只是想把几个键值对存到本地文件,PickleDB 是个值得看看的选择。
这个项目基于 orjson 模块构建,主打一个简单直接。当前 Star 数 1070,不算热门项目,但解决的问题很具体:给 Python 开发者提供一个零依赖(除 orjson 外)、开箱即用的本地键值存储。

核心设计:够用就好
PickleDB 的定位很明确。它不做分布式,不做复杂查询,也不追求企业级特性。它就是一个内存里的键值存储,带异步支持,数据以 JSON 格式持久化到本地文件。
代码量不大,但核心功能齐全。初始化只需要一行代码就能开始用:
from pickledb import PickleDB
db = PickleDB("example.json").load()
db.set("key", "value")
db.get("key") # return "value"
数据默认以 JSON 格式落盘,人类可读,也方便手动编辑。底层用 orjson 负责序列化,性能比 Python 标准库里的 json 模块高不少。对于读多写少的场景,这个组合够用了。
值得一提的是它还支持异步操作。在 async/await 已经普及的当下,这个特性让 PickleDB 能比较好地融入现代 Python 项目的代码风格里。
适合什么场景
这种轻量级方案最适合以下情况:
第一,单机脚本或小型应用。不需要安装 Redis,也不需要配置数据库连接,一个 JSON 文件就能完成数据存储。部署的时候直接把文件拷走就行。
第二,配置缓存。把一些不常变化的配置读进内存,操作完再写回文件,逻辑很干净。JSON 格式也方便人工查看和调试。
第三,快速原型开发。做 Demo 或验证想法的时候,不想在基础设施上花时间,PickleDB 可以直接用,后期如果需要迁移到更重的方案,数据结构也不复杂。
第四,教学或学习用途。代码简洁,适合用来理解键值存储的基本原理。BSD 三条款许可证,商用和修改都没有顾虑。

也有局限
毕竟是个轻量方案,它不适合所有场景。
高并发写入是它的短板。JSON 文件不是为频繁随机写设计的,多个进程同时写入会有竞争问题。数据量大的时候,全量序列化和反序列化的开销也会明显上升。
功能层面,它不支持查询语言,没有索引机制,也没有事务保证。键值对的结构决定了你只能按 key 查,没法做条件过滤或范围查询。
如果你需要上述特性,还是得上正经的数据库或专门的缓存系统。
与其他方案的对比
和 Redis 相比,PickleDB 没有网络开销,但也没有 Redis 的丰富数据结构和集群能力。和 Python 内置的 shelve 模块相比,PickleDB 用 JSON 代替了 pickle 格式,数据更透明,跨语言读取也更方便。和直接读写 JSON 文件相比,它封装了一层内存缓存,避免了每次操作都走磁盘 IO。
总结
PickleDB 不是要取代 Redis 或 MongoDB。它的价值在于把一件事做到足够简单:在 Python 里存取键值数据,几行代码就能跑起来。
如果你正在做一个小型项目,需要一个本地存储方案,又不想引入太重的依赖,可以看看这个项目。代码简单,接口直观,对于合适的场景来说,是个省事儿的选择。
浙公网安备 33010602011771号