dot Redis 8 已发布——它是开源的

了解更多

JSON 存储

返回词汇表

JSON 存储定义

JSON 存储指的是以 JSON(JavaScript Object Notation)格式存储数据,JSON 是一种轻量级且广泛使用的数据交换格式。JSON 是一种基于文本的格式,易于人类阅读和编写,也易于计算机解析和生成。

JSON 存储在 Web 开发中很受欢迎,因为许多 Web 应用都是使用 JavaScript 构建的,JavaScript 可以轻松操作 JSON 数据。JSON 可用于在服务器和客户端之间存储和传输数据,也可作为在数据库中存储数据的格式。

JSON 存储通常与 NoSQL 数据库结合使用,NoSQL 数据库是非关系型数据库,旨在处理大量非结构化或半结构化数据。NoSQL 数据库非常适合 JSON 数据,因为它们是无模式的,可以处理灵活和动态的数据结构。

JSON 存储最佳实践

在 Redis 中存储 JSON 有几种方法。最基本的形式是获取预先序列化的数据,然后简单地将其存储在特定的键上

> SET car "{"colour":"blue","make":"saab","model":93,"features":["powerlocks","moonroof"]}"
OK
> GET car
"{"colour":"blue","make":"saab","model":93,"features":["powerlocks","moonroof"]}"

这种方法看似简单,但存在一些非常真实的缺点

前两点对于少量数据来说可能微不足道,但肯定会累积起来。特别是对于多兆字节的 JSON 存储。然而,第三点则更为关键。

在 Redis 4.0 之前,在 Redis 中处理 JSON 数据的唯一方法是使用通过 cjson 模块的 Lua 脚本。这部分解决了 JSON 问题,尽管它仍然是一个瓶颈,并增加了学习 Lua 的额外负担。

更糟的是,许多应用会直接 GET 整个 JSON 字符串,将其反序列化,操作后重新序列化,然后在应用端再次 SET 回去。这是一种反模式。使用这种方法存在丢失数据的真实风险。举个例子

反模式:请勿使用
 应用实例 #1应用实例 #2
1> GET my-car 
2[反序列化,将 colour 更改为 ‘red’,然后重新序列化]> GET my-car
3> SET my-car [来自实例 #1 的新值][反序列化,将 model 更改为 ‘95’,然后重新序列化]
4 > SET my-car [来自实例 #2 的新值]
5 > GET my-car …

第 5 行的结果将只显示来自实例 #2 的更新,而实例 #1 中设置的颜色将会丢失。

Redis 4.0+ 具备使用模块的能力。RedisJSON 是一个提供特殊数据类型和直接操作命令的模块。RedisJSON 将数据存储为二进制格式,消除了 JSON 的存储开销,并提供更快的元素访问速度,无需反序列化/重新序列化。

要使用 RedisJSON,您需要在 Redis 服务器中安装它,或者在 Redis Enterprise 数据库中启用它。

以前面的例子为例,使用 RedisJSON 代替将 JSON 存储为字符串,代码如下所示

 应用实例 #1应用实例 #2
1>JSON.SET car2 . ‘{“colour”:”blue”, “make”:”saab”, “model”:93, “features” :[ “powerlocks”, “moonroof” ]}’ 
2> JSON.SET car2 colour ‘”red”‘ 
3 > JSON.SET car2 model ’95’
4 >JSON.GET car2 . “{ “colour”:”red”, “make”:”saab”, “model”:95, “features”: [“powerlocks”, “moonroof”]}”

RedisJSON 提供了一种通常更安全、更快、更直观的方式来在您的数据存储中操作 JSON,特别是在需要对子元素进行原子操作的情况下。