dot 快速未来的科技将在你所在的城市举办一场盛会。

加入我们,参加 Redis 发布会

JSON 存储

返回词汇表

JSON 存储定义

JSON 存储是指以 JSON(JavaScript 对象表示法)格式存储数据,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 的额外负担。

更糟糕的是,许多应用程序只是获取整个 JSON 字符串,对其进行反序列化,对其进行操作,重新序列化,然后再次将其设置为应用程序。这是一种反模式。使用这种方法存在丢失数据的风险。例如:

反模式:不要使用
 应用程序实例 #1应用程序实例 #2
1> GET my-car 
2[反序列化,将颜色更改为“红色”,然后重新序列化]> GET my-car
3> SET my-car [实例 #1 的新值][反序列化,将型号更改为“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 的方法,尤其是在需要子元素原子操作时。