RedisJson特性让我放弃了MongoDB,也让我放弃了Hash,我就问你们香不香?

C# C++ 笔记 变量自定义赋值​# 变量取值用$()​​​​​​clean:多个程序员分发同一程序时,由于不能直接在一个程序上进行功能的开发,所以就有了功能分支的概念。二维数组可以理解为是存储指针的一维数组,里面的每一个指针都指向一个一维数组的首地址存储多个一维数组的数据结构。array 是一个二维数组,它有3行和4列,总共可以存储12个整数。 阅读详情

图片

说说RedisJson 重磅特性


[公粽号:堆栈future]

干货:redis支持json文档存储了,你可以放弃mongodb了?


1. mongodb介绍

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写,旨在为WEB应用提供可扩展的高性能数据NoSQL存储解决方案。

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB文档类似于JSON对象。字段值可以包含其他文档,数组及文档数组。图片

MongoDB在高负载的情况下,可以添加更多的节点,以此来保证服务器性能。

既然MongoDB是以类JSON文档存储,那么更新文档,删除文档或者获取文档等都是在操作类JSON。我们可以看下MongoDB插入,以下事例摘自网络哈:

>db.col.insert({title: 'MongoDB', 
    description: 'MongoDB是一个Nosql数据库',
    by: 'baidu',
    tags: ['mongodb', 'database', 'NoSQL'],
})

查询:

> db.col.find({"by":"baidu"}).pretty()
{
        "_id" : ObjectId("56063f17ade2f21f36b03133"),
        "description" : "MongoDB是一个Nosql数据库",
        "by" : "baidu",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ]
}

这个类JSON文档其实它的数据结构和JSON基本一样,所有存储在集合中的数据都是BSON格式。

BSON是一种类似JSON的二进制形式的存储格式,是Binary JSON的简称。

2. RedisJson

RedisJSON - Redis的JSON数据类型

你没有看错,就是Redis最新出的一个特性:支持JSON存储和获取了。这个功能我觉得是王炸,对于我这种人来说存储json数据有很多好处,但是你可能会反对,redis已经有hash数据类型了,多一个json类型难免有点鸡肋,毕竟这么多年了,没有json类型大家也照样过来了,那么它到底解决什么问题呢?

别急,请往下看。

RedisJSON是一个Redis模块,实现了ECMA-404 JSON数据交换标准作为本地数据类型。它允许根据Redis键存储,更新和获取JSON值(文档)。

主要特性:

  • 完全支持JSON标准

  • 用类似JSONPath的语法在文档中选择元素

  • 文档以树状结构的二进制数据形式存储,可以快速访问子元素

  • 对于所有JSON值类型都定义了原子操作

RedisJSON是在Redis用<3开发的。源代码可以从https://github.com/RedisJSON/RedisJSON获得。

❤️:是什么意思呢?哈哈哈哈哈哈,知道这个的挺厉害的,不知道的下去查下哦。

接下来我们给大家演示下:

  1. 使用Docker启动RedisJSON

    使用Docker在Windows、MacOS或Linux上运行以下命令:

docker run -p 6379:6379 --name redis-redisjson redislabs/rejson:latest

打印日志如下:图片

  1. 使用RedisJSON

    用redis-cli可以直接进入:

//插入json数据 key是doc value是json
➜  ~ redis-cli
127.0.0.1:6379> JSON.SET doc . '{"name": "jamlee", "age": 18}'
OK

//获取json里面的field
127.0.0.1:6379> JSON.GET doc .name
"\"jamlee\""
127.0.0.1:6379> JSON.GET doc .age
"18"

//把我的年龄加1
127.0.0.1:6379> JSON.NUMINCRBY doc .age 1
"19"

//我想在json中在插入一个field属性:
127.0.0.1:6379> JSON.SET doc .array '[1,2,3]'
OK
127.0.0.1:6379> JSON.GET doc
"{\"name\":\"jamlee\",\"age\":19,\"array\":[1,2,3]}"

//给json中的array数组增加三个元素
127.0.0.1:6379> JSON.ARRAPPEND doc .array true null false
(integer) 6

//从json的array中pop一个元素出来
127.0.0.1:6379> JSON.ARRPOP doc .array
"false"

//查看json的array
127.0.0.1:6379> JSON.GET doc .array
"[1,2,3,true,null]"

//查看type
127.0.0.1:6379> JSON.TYPE doc
"object"

再给大家展示一个比较厉害的:

//创建json 不过里面是list
127.0.0.1:6379> JSON.SET lst . '[ true, { "answer": 42 }, null ]'
OK
//获取第二个元素的answer属性
127.0.0.1:6379> JSON.GET lst [1].answer
"42"

到这里我就不一一列举了,支持的操作非常多而且灵活,你就说用它来存储json香不香,我觉得太香了。

那大家可能会说你是docker启动的,我如果想用它但不想用docker启动怎么办?好说啊,上干货:

  1. 先从Redis下载中心下载预编译版本 https://redis.com/download-center/modules/

  2. 接下来,使用RedisJSON运行Redis

$ redis-server --loadmodule /path/to/module/rejson.so

3. 小结

既然redis支持json了,你们还会用MongoDB吗?我相信大家通过上面的操作演示就可以看出来了,你们心里也一定有答案了。

而且通过上面演示,我相信你也立马看出来RedisJson和Hash的区别了,有时候hash做不了的,RedisJson非常轻松的都可以搞定。

参考:https://oss.redis.com/redisjson/#redis-cloud

公粽号:堆栈future

使很多处于迷茫阶段的coder能从这里找到光明,堆栈创世,功在当代,利在千秋

124篇原创内容
图片

Redis Stack vs Elasticsearch:结构化搜索性能实测与选型指南 搜索引擎性能对比不能脱离场景空谈——结构化数据的精准匹配、前缀搜索、范围过滤和轻量聚合,是电商、后台管理等高频业务的核心需求。其底层原理依赖内存索引(如Trie树、B-Tree)与倒排索引的路径差异,技术价值在于低延迟、零同步、极简运维;典型应用场景包括商品列表筛选、标签检索、实时数据看板等。本文基于真实电商数据,在统一硬件与负载下实测Redis Stack与Elasticsearch 8.11在关键词匹配、前缀搜索、多条件组合等五类查询中的P95延迟,揭示‘快5倍’背后的适用边界与能力取舍。 阅读详情

相关推荐

处理图数据, 安装“Pytorch“ + 图神经网络开源框架“PyG “+ “ogb“使用

"OGB" OSError: [WinError 127] 找不到指定的程序。1.[遇到这类问题往往跟torch安装的工具包(如torch-sparse,torch-scatter,torch-cluster)版本没对应上有关](https://blog.youkuaiyun.com/weixin_42358688/article/details/117433691)2.[OGB使用环境安装与依赖](https://ogb.stanford.edu/docs/home/)Data Loaders3.[torch-geo

Fuguir™的博客 3698

redis存储对象(通过JSON方式)

redis存储对象 在Java程序中,redis提供的方法插入的key,value要么是string,要么就是byte[]数组。那如果是要插入的value是个对象怎么办呢?网上的方法大多是对这个对象进行序列化。序列化还有一个作用是可以将对象序列化之后通过socket进行传输。那么,JSON也是一个进行数据交换的格式。何不将对象转为JSON字符串然后当作String存在Value中也是可以的。 我用...

qq_45142791的博客 2285

鸿蒙OS开机动画背后的秘密:从代码到视觉的完整解析(附源码分析)

本文深入解析了鸿蒙OS开机动画的系统级实现原理。从bootanimation服务的启动配置、与Render Service的协同,到基于VSync信号的帧率同步与绘制流水线,结合OpenHarmony源码进行了逐行解读。文章揭示了其事件驱动的优雅退出机制,并探讨了视频支持、多屏适配等高级特性与定制化可能,为开发者理解鸿蒙图形子系统提供了硬核技术视角。

sony5的博客 971

Redis使用字符串和hash存储JSON,那个更高效?

Redis使用字符串和hash存储JSON,那个更高效? 最近在排查一个线上问题,发现redis使用了一个hash key里面存储了600w的field,为啥这么多就是因为他把一个结构体中的字段分成了多个field存储。下面来看看到底应该怎么设计比较合理。 一、问题 一种使用简单的字符串键和值。 键:用户,值:payload(整个JSON,可以为100-200 KB) SET user:1 payload 使用哈希 HSET user:1 username "someone" HSET user

程序员学编程 的专栏 1万+

【程序化天空盒】过程记录01:日月 天空渐变 大气散射

在做一个仿照原神的天空盒,写文章作为技术总结和记录。

qq_41835314的博客 6741

【毫米波混合波束成形】第3章 深度展开网络:将迭代优化嵌入计算图

相位提取算子 $P_\phi: \mathbb{C}^N \to \mathbb{C}^N$ 定义为逐元素相位归一化 $P_\phi(z) = \exp(j \cdot \angle z)$。该算子在复数域非全纯(Non-holomorphic),标准反向传播需扩展至Wirtinger微积分框架。对于复数变量 $z = x + jy$,Wirtinger导数定义:相位提取算子的Jacobian矩阵在极坐标下具有稀疏结构。

VectorShift的博客 406

今日热点 | RedisJson 横空出世,惊呆ES和Mongo

一、概述 近期官网给出了RedisJson(RedisSearch)的性能测试报告,可谓碾压其他NoSQL,下面是核心的报告内容,先上结论: 对于隔离写入(isolated writes),RedisJSON 比 MongoDB 快 5.4 倍,比 ElasticSearch 快 200 倍以上。 对于隔离读取(isolated reads),RedisJSON 比 MongoDB 快 12.7 倍,比 ElasticSearch 快 500 倍以上。 在混合工作负载场景中,实时更新不会影响 Redi

【优快云】 3771

【机器人技术基础】MATLAB Robotics Toolbox PUMA560 运动学正逆解

机器人技术基础实验2报告 1. 实验目的和要求 2. 实验手段 2.1 实验原理 2.2 函数详解 3. 实验主要内容 4. 实验结果和分析 4.1 正运动学求解 例1 例2 4.2 逆运动学求解 例1 例2 1. 实验目的和要求 掌握常见形式的机器人的D-H坐标系建立方法、运动学建模; 正逆运动学分析与求解; 使用Robotics Toolbox对直角坐标机器人、圆柱坐标机器人、球坐标机器人、PUMA560其中之一建立运动学模型,正逆求解和仿真。 2. 实验手段 2.1

【人工智障 | 计算鸡视觉 | 机器孩】 1万+

Redis 基础 -- Redis数据类型之hash、redis原则、string存储对象和hash存储对象对比

Redis数据类型之hash、redis原则、string存储对象和hash存储对象对比

天行健 君子以自强不息,地势坤 君子以厚德载物。 2046

R语言中的Gamma分布函数

在R语言中,我们可以使用最大似然估计(Maximum Likelihood Estimation,MLE)或最小二乘估计(Least Squares Estimation,LSE)等方法来估计Gamma分布的参数。本文介绍了在R语言中使用Gamma分布函数的基本操作,包括生成随机变量、计算概率密度函数和累积分布函数,以及参数估计和拟合。函数来生成Gamma分布的随机变量,计算概率密度函数(PDF)和累积分布函数(CDF),以及进行参数估计和拟合。要计算Gamma分布的累积分布函数(CDF),我们可以使用。

ByteWhiz的博客 1630

【华为OD机试真题】6、数组去重和排序 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

题目描述 >给定一个乱序的数组,删除所有的重复元素,使得每个元素只出现一次,并且按照出现的次数从高到低进行排序,相同出现次数按照第一次出现顺序进行先后排序

KJ.JK 3887

Redis高级篇(三)

Redis最佳实践

真滴不可理喻的博客 657

Hermes Agent 安装部署完全指南

Hermes Agent安装部署指南提供了两种安装方式:一键脚本安装和手动分步安装。该AI助手支持多平台运行(Linux/macOS/WSL2),核心功能仅需Git作为前置依赖,其他依赖如Python、Node.js等均由安装脚本自动处理。文档详细介绍了系统要求、依赖管理、配置目录结构、环境变量设置以及10个手动安装步骤,并提供了功能模块化选项,用户可根据需求选择安装语音交互、浏览器自动化等扩展功能。安装完成后可通过hermes doctor命令验证环境,并通过交互式向导完成初始化配置。

简简单单Onlinezuozuo 2618

告别MongoDB?我用RedisJSON重构了Node.js项目的用户会话缓存(附性能对比)

本文探讨了如何利用RedisJSON重构Node.js项目的用户会话缓存,以替代传统的MongoDB方案。通过详细的性能对比和实战案例,展示了RedisJSON在处理复杂嵌套JSON数据时的优势,包括更低的延迟、更高的查询效率以及显著降低的内存占用和成本。

weixin_42542669的博客 144

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

redis支持json,mongodb还有存在的必要吗

Redis 和 MongoDB 是两种不同类型的数据库系统,尽管 Redis 现在支持 JSON 数据类型(通过 RedisJSON 模块),但这并不意味着 MongoDB 没有存在的必要。尽管 Redis 现在支持 JSON 并提供了高性能的内存存储解决方案,但 MongoDB 因其持久化存储、复杂查询支持和大数据处理能力等特性,仍然在许多场景中发挥着不可替代的作用。Redis 支持多种数据结构,如字符串、列表、集合、哈希表等,以及现在通过 RedisJSON 支持的 JSON 数据类型。

怀揣梦想,一颗执着于技术的心从未磨灭,内心住着一颗顽强的小强时刻提醒自己层层突破自我,同时也成就他人 476

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Redis Search 与 Redis JSON:全面提升全文检索与数据存储性能的新特性

Redis 通过引入 Redis Search 和 Redis JSON 两大模块,拓展了其作为缓存工具的传统应用场景。Redis Search 提供了全文检索能力,支持倒排索引、模糊查询等复杂搜索功能;Redis JSON 则支持结构化数据的高效存储与查询。官方测试显示,Redis JSON 在写入性能上比 MongoDB 快 5.4 倍,比 Elasticsearch 快 200 倍,查询性能优势更显著。二者的结合使 Redis 能够同时满足高并发数据存储和高效检索需求,适用于电商搜索、社交平台等。

qq_46371374的博客 930

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Redis核心数据结构与高并发场景实践指南

内存数据库作为高性能数据存储解决方案,通过将数据驻留内存实现微秒级响应。Redis作为典型的键值存储系统,其核心价值在于提供丰富的数据结构支持与原子操作能力,特别适合应对高并发读写场景。字符串、哈希、列表等基础数据结构可灵活组合,支撑会话管理、实时排行榜等典型应用。通过合理使用持久化机制与集群方案,Redis能有效解决缓存雪崩、大Key性能瓶颈等工程难题,成为电商、社交等互联网应用的底层基础设施标配。本文结合分布式锁、微服务集成等实战案例,详解如何通过内存优化与监控策略提升Redis服务稳定性。

weixin_30617797的博客 339

Redis 数据库 入门 教程

Redis 数据库入门教程

freeking101的博客 3684

Redis实战笔记:从数据结构到高并发缓存架构设计

Redis作为高性能的键值对内存数据库,其核心在于对多种数据结构的支持,如字符串、哈希、列表、集合和有序集合。理解这些数据结构及其操作的时间复杂度是高效使用Redis的基础。其单线程模型和内存存储机制带来了极高的读写性能,并通过RDB和AOF持久化机制保障数据安全。在技术价值上,Redis广泛应用于缓存、会话存储、消息队列和排行榜等场景,能显著提升系统响应速度并降低数据库负载。面对高并发场景,需要深入理解缓存穿透、击穿、雪崩等经典问题及其解决方案,例如使用布隆过滤器、分布式锁和随机过期时间等策略。本文基于一

weixin_34372728的博客 341

Redis 实战修炼与原理进阶专栏大纲

Redis 8.6.x 实战专栏摘要 本专栏采用「业务痛点→剧本对话→代码实战→总结」的四步结构,系统讲解 Redis 从入门到生产落地的全栈知识。基础篇(1-16章)聚焦单机 Redis,涵盖数据结构、缓存模式与基础运维;中高级篇(17-40章)深入高并发架构、分布式一致性、源码调优等进阶内容。通过电商场景贯穿实战,包含验证码、购物车、排行榜等典型模块。特色三人剧本(小胖/小白/大师)生动解析技术决策过程,配套可运行代码和故障演练场景,帮助开发者快速掌握 Redis 核心能力与生产级最佳实践。

davidwang456的专栏 916
上一篇: 面试官:聊聊Redis有哪些特性,不要慌,把你知道的都告诉他
下一篇: Go并发调度-调度器设计理念从何而来?为何如此高效?
stackfuture
博客等级 码龄5年 23粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值