redis 中的 RedisJSON模块

7.4.RedisJSON模块

7.4.1.介绍

RedisJSON 模块是一个 Redis 社区贡献的模块,它为 Redis 增加了对 JSON 数据类型的原生支持。这个模块使得 Redis 能够直接存储、查询和操作 JSON 数据,而无需将数据序列化和反序列化成字符串或哈希表,从而提高了数据处理的效率和性能。

Redis 6.0版本之后支持 RedisJSON模块

RedisJSON 允许你将整个 JSON 文档存储为 Redis 键值对中的值。

  1. 路径表达式
    RedisJSON 支持 JSONPath 表达式,这允许你以一种灵活的方式访问和修改嵌套的 JSON 数据。
  2. 事务性操作
    RedisJSON 命令可以在事务中执行,保证数据的一致性和原子性。
  3. 性能优化
    由于数据直接以二进制形式存储,RedisJSON 减少了序列化和反序列化的开销,提高了读写速度。

7.4.2.安装模块 RedisJSON

1.docker

如果你使用的是 Docker,需要在运行Redis服务器的机器上安装该模块。

这通常涉及到下载模块并将其放置在Redis的模块目录中,然后在Redis配置文件中启用它。

接取镜像

docker pull redislabs/rejson

配置启动

docker run --name redis-json -p 6379:6379 -d redislabs/rejson
2.下载添加

需要下载 RedisJSON 模块源码,编译并将其放在 Redis 的模块目录中,然后在 Redis 的配置文件中启用模块。

从 Redis 官网(https://redis.io/modules/redisjson)下载并安装 RedisJSON 模块

使用 --loadmodule 选项加载 RedisJSON 模块

redis-server --loadmodule /path/to/redisjson.so

确保将 /path/to/redisjson.so 替换为 RedisJSON 模块的正确路径。

或者,

也可以在 redis.conf 配置文件中添加以下行:

loadmodule /path/to/redisjson.so

然后重启 Redis。

启动 Redis 服务器后,使用 MODULE LIST 命令来检查 RedisJSON 是否已成功加载 。

7.4.3.路径表达式

RedisJSON 模块使用了一种基于 JSONPath 的路径表达式语法,允许用户在 Redis 中定位和操作 JSON 数据的特定部分。路径表达式在 RedisJSON 的各种命令中扮演着核心角色,如 JSON.GET, JSON.SET, JSON.DEL 等。下面是对 RedisJSON 中路径表达式语法的详细讲解:

1. 基础路径表达式
  • 根路径$root 表示 JSON 文档的根节点。
  • 属性访问:使用 . 后跟属性名来访问对象的属性。例如,$.name 访问根对象的 name 属性。
2. 数组索引
  • 索引访问:使用 [index] 来访问数组中的特定元素。例如,$.tasks[0] 访问 tasks 数组的第一个元素。
  • 范围访问:使用 [start:end] 来访问数组的一个切片。例如,$.tasks[1:3] 访问 tasks 数组的第二个和第三个元素。
3. 通配符
  • 数组元素[*] 用于匹配数组中的所有元素。例如,$.tasks[*] 匹配 tasks 数组的所有元素。
4. 过滤器
  • 条件过滤[?(@.property == value)] 用于过滤数组元素,只返回满足条件的元素。例如,$.tasks[?(@.status == "pending")] 返回所有状态为 “pending” 的任务。
5. 复杂表达式
  • 嵌套属性:可以连续使用 . 来访问嵌套属性。例如,$.person.address.city 访问 person 对象的 address 对象的 city 属性。
  • 嵌套数组索引$.person.tasks[0].description 访问 person 对象的 tasks 数组中第一个元素的 description 属性。
6. 特殊字符
  • 转义:如果需要在路径中使用特殊字符(如点号 . 或方括号 []),可以使用 \ 进行转义。例如,$.key\.with\.dot$.key\[with\]square\[brackets\]
示例

假设我们有以下 JSON 结构:

{"person": {"name": "John Doe","address": {"street": "123 Main St","city": "Anytown"},"tasks": [{"id": 1, "description": "Buy milk", "status": "completed"},{"id": 2, "description": "Call mom", "status": "pending"}]}
}

使用以下路径表达式:

  • $.person.name 返回 "John Doe"
  • $.person.address.city 返回 "Anytown"
  • $.person.tasks[*].description 返回数组 ["Buy milk", "Call mom"]
  • $.person.tasks[?(@.status == "pending")].description 返回数组 ["Call mom"]

RedisJSON 的路径表达式提供了一个强大的工具集,可以精确地定位和操作 JSON 数据,这对于处理复杂的数据结构特别有用。

7.4.4.使用示例

以下是一些使用 RedisJSON 的基本命令示例:

注意 外层使用 ' 单引号

1. 设置 JSON 文档

使用 JSON.SET 命令可以设置一个 JSON 文档。

JSON.SET myjson $ '{"name":"John","age":30,"city":"New York"}'

注意,在 JSON.SET 命令中,键(key)是 myjson,路径(path)是 $(表示 JSON 文档的根),而值(value)是一个 JSON 格式的字符串。

添加或更新 JSON 字段??
JSON.SET myjson $ '{"city": "Beijing", "country": "China"}' NX 
2. 获取整个 JSON 文档

使用 JSON.GET 命令可以获取整个 JSON 文档。

JSON.GET myjson

这个命令会返回与 myjson 键关联的 JSON 数据。

3. 获取 JSON 文档中的特定字段

如果你只想获取 JSON 文档中的某个字段,可以使用路径参数。

JSON.GET myjson $.name
4.返回 JSON 对象的所有键
JSON.OBJKEYS  myjson

返回 JSON 对象的所有键。

5.返回 JSON 对象中元素的数量
JSON.OBJLEN  myjson

返回 JSON 对象中元素的数量(不包括嵌套的对象或数组)。

6. 更新 JSON 文档中的字段

使用 JSON.SET 命令也可以更新 JSON 文档中的字段。

JSON.SET myjson $.age 31

在这个例子中,.age 指定了要更新的字段路径,而 31 是新的值。

7. 删除 JSON 文档中的字段或整个文档。

使用 JSON.DEL 命令可以删除 JSON 文档中的字段。

JSON.DEL myjson $.age
8. 追加数组元素

增加数组属性

JSON.set myjson $.hobbies '["sing", "study"  ] '

如果你有一个 JSON 数组,你可以使用 JSON.ARRAPPEND 命令追加元素。

 json.arrappend myjson $.hobbies  '"reading"'  '"traveling"'
9.数组中插入元素
json.arrinsert myjson $.hobbies 1 "cooking"
10. 获取数组长度

使用 JSON.ARRLEN 命令可以获取数组的长度。

JSON.ARRLEN myjson $.hobbies
11. 查询 JSONPath

使用 JSON.GET 命令结合 JSONPath 表达式来查询嵌套数据:

json.get myjson $.hobbies[1]

这将返回 "cooking"

完整示例

下面是一个简单的完整示例,演示了如何使用 RedisJSON:

# 设置一个 JSON 文档
JSON.SET user:1000 . '{"name":"John Doe","age":30,"email":"john@example.com"}'
# 获取整个 JSON 文档
JSON.GET user:1000
# 获取用户的年龄
JSON.GET user:1000 .age
# 更新用户的邮箱
JSON.SET user:1000 .email "john.doe@example.com"
# 删除用户的年龄信息
JSON.DEL user:1000 .age
# 追加一个兴趣到用户的兴趣列表
JSON.ARRAPPEND user:1000 .interests [] "fishing"
# 获取兴趣列表的长度
JSON.ARRLEN user:1000 .interests

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/384442.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【电源专题】结合锂电池相关资料和华为手机聊聊锂离子电池使用条件限制

在文章:【电源专题】锂电池的特点和工作原理 中我们讲到了一些关于锂电池种类和特点、工作原理等。但是对于锂离子电池使用条件限制却没有介绍,本文基于手机产商 锂离子电池使用条件-电池性能和应用介绍 | 华为官网 (huawei.com)提供的介绍文档再次深入学习锂离子电池的一些特…

bug+测试用例

bug的概念: 1.当且仅当规格说明是存在的并且正确,程序与规格说明之间的不匹配才是错误。 2.当需求规格说明书没有提到的功能,判断标准以最终用户为准;当程序没有实现其最终用户合理预期的功能要求时,就是软件错误 bug…

区块链浏览器开发指南分享

01 概括 区块链浏览器是联盟链上的一种数据可视化工具,用户可以通过web页面,直接在浏览器上查看联盟链的节点、区块、交易信息和子链信息、标识使用信息等,用以验证交易等区块链常用操作。 02功能模块 区块链网络概览 区块链网络概览显示…

【Linux】进程IO|系统调用|open|write|文件描述符fd|封装|理解一切皆文件

目录 ​编辑 前言 系统调用 open 参数flags 参数mode write 追加方式 read close 文件描述符 打开多个文件并观察其文件描述符 C语言文件操作 理解一切皆文件 理解open操作 前言 各类语言的文件操作其实是对系统调用的封装 我们经常说,创建一个文件&a…

【数据结构】顺序表(杨辉三角、简单的洗牌算法)

🎇🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔 💪💪💪 谢谢你这么帅…

MySQL可重复读的隔离机制下是否彻底解决了幻读?

答案:没有彻底解决。 一、什么是幻读? 当同一个查询在不同时间产生不同的结果集时,事务中就会出现幻读问题。 幻读关注的是记录数量的不同。 不可重复读关注的是记录内容的不同。 二、快照读和当前读 InnoDB引擎的默认隔离级别是可重复读&…

音视频入门基础:H.264专题(17)——FFmpeg源码获取H.264裸流文件信息(视频压缩编码格式、色彩格式、视频分辨率、帧率)的总流程

音视频入门基础:H.264专题系列文章: 音视频入门基础:H.264专题(1)——H.264官方文档下载 音视频入门基础:H.264专题(2)——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…

Spark 运行架构

运行架构 Spark 框架的核心是一个计算引擎,整体来说,它采用了标准的 master-slave 结构。上图中的 Driver 表示 master ,负责管理整个集群中的作业任务调度;Executor 则是 slave,负责实际执行任务; 核心组…

深入解析:百数平台图表联动功能设置与实战应用

在当今数据驱动的时代,图表的联动功能已成为数据分析的得力助手。通过深度整合各类图表,如柱形图、折线图、饼图、雷达图、条形图、透视图、面积图、双轴图、地图以及漏斗图等,我们实现了图表之间的无缝衔接,使得数据的呈现与探索…

Spring Boot的Web开发

目录 Spring Boot的Web开发 1.静态资源映射规则 第一种静态资源映射规则 2.enjoy模板引擎 3.springMVC 3.1请求处理 RequestMapping DeleteMapping 删除 PutMapping 修改 GetMapping 查询 PostMapping 新增 3.2参数绑定 一.支持数据类型: 3.3常用注解 一.Request…

【Ant Design Pro】快速上手

初始化 初始化脚手架:快速开始 官方默认使用 umi4,这里文档还没有及时更新(不能像文档一样选择 umi 的版本),之后我选择 simple。 然后安装依赖。 在 package.json 中: "start": "cross-e…

基于微信小程序+SpringBoot+Vue的青少年科普教学系统平台(带1w+文档)

基于微信小程序SpringBootVue的青少年科普教学系统平台(带1w文档) 基于微信小程序SpringBootVue的青少年科普教学系统平台(带1w文档) 这个工具就是解决上述问题的最好的解决方案。它不仅可以实时完成信息处理,还缩短高校教师成果信息管理流程,使其系统化…

qt初入门9:qt记录日志的方式,日志库了解练习(qInstallMessageHandler,qslog, log4qt)

项目中用到qt,考虑有需要用到去记录日志,结合网络,整理一下,做记录。 简单了解后,qt实现日志模块思考: 1:借助qt自带的qInstallMessageHandler重定向到需要的目的地。 2:自己封装一…

CogVideo 实测,智谱「清影」AI视频生成,全民免费,连 API 都开放了!

不得不说,AI 视频生成界最近非常火热~ 前有快手「可灵」开放内测,一下子带火了老照片修复,全网刷屏: 怕是你还没拿到内测资格,被称为 “国货之光” 的「可灵」就结束了免费无限量模式。每天只有66点的免费额度&#x…

看 Unity 组件的源码 —— ILSpy

ILSpy 是开源的 .NET 程序集浏览器和解编译器。 下载 ILSpy ILSpy Github 地址:icsharpcode/ILSpy: .NET Decompiler with support for PDB generation, ReadyToRun, Metadata (&more) - cross-platform! (github.com) 它有 Release 包可以下载 也提供 IDE 的…

静态路由学习笔记

1. 静态路由应用场景 (1)静态路由由网络管理员手动配置,配置方便,对系统要求低,适用于拓扑结构简单并且稳定的小型网络。 (2)缺点是不能自动适应网络拓扑的变化,需要人工干预过多。…

Python爬虫技术 第13节 HTML和CSS选择器

在爬虫技术中,解析和提取网页数据是核心部分。HTML 和 CSS 选择器被广泛用于定位网页中的特定元素。下面将详细介绍这些选择器如何在 Python 中使用,特别是在使用像 Beautiful Soup 或 Scrapy 这样的库时。 HTML 选择器 HTML 选择器基于 HTML 元素的属性…

企业公户验证API如何使用JAVA、Python、PHP语言进行应用

在纷繁复杂的金融与商业领域,确保每笔交易的安全与合规是至关重要的。而企业公户验证API,正是这样一位默默守护的数字卫士,它通过智能化的手段,简化了企业对公账户验证流程,让繁琐的审核变得快捷且可靠。 什么是企业公…

ShadingModel一些分析

一、算法分级 二、DFGTexture 用拟合替换DFGTexture(Ref:Cod-Black Ops II) 优点:节省一张纹理的采样。 缺点: 1、效果上会变得暗一些,并且由于用拟合的原因,会多一点指令计算。 2、后续如…

《Milvus Cloud向量数据库指南》——BGE-M3:多功能、多语言、多粒度的文本表示学习模型

引言 在自然语言处理(NLP)领域,随着大数据时代的到来,对文本信息的精准处理与高效检索成为了研究热点。BERT(Bidirectional Encoder Representations from Transformers)作为近年来NLP领域的里程碑式模型,以其强大的上下文理解能力在多项任务中取得了显著成效。然而,面…