RedisJson特性让我放弃了MongoDB,也让我放弃了Hash,我就问你们香不香?
2022/1/5 2:03:51
本文主要是介绍RedisJson特性让我放弃了MongoDB,也让我放弃了Hash,我就问你们香不香?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
说说RedisJson 重磅特性
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开发的。源代码可以从github.com/RedisJSON/R…
<3:是什么意思呢?哈哈哈哈哈哈,知道这个的挺厉害的,不知道的下去查下哦。
接下来我们给大家演示下:
- 使用Docker启动RedisJSON 使用Docker在Windows、MacOS或Linux上运行以下命令:
docker run -p 6379:6379 --name redis-redisjson redislabs/rejson:latest
打印日志如下:
- 使用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启动怎么办?好说啊,上干货:
- 先从Redis下载中心下载预编译版本 redis.com/download-ce…
- 接下来,使用RedisJSON运行Redis
$ redis-server --loadmodule /path/to/module/rejson.so
3. 小结
既然redis支持json了,你们还会用MongoDB吗?我相信大家通过上面的操作演示就可以看出来了,你们心里也一定有答案了。
而且通过上面演示,我相信你也立马看出来RedisJson和Hash的区别了,有时候hash做不了的,RedisJson非常轻松的都可以搞定。
这篇关于RedisJson特性让我放弃了MongoDB,也让我放弃了Hash,我就问你们香不香?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16Vue3资料:新手入门必读教程
- 2024-11-16Vue3资料:新手入门全面指南
- 2024-11-16Vue资料:新手入门完全指南
- 2024-11-16Vue项目实战:新手入门指南
- 2024-11-16React Hooks之useEffect案例详解
- 2024-11-16useRef案例详解:React中的useRef使用教程
- 2024-11-16React Hooks之useState案例详解
- 2024-11-16Vue入门指南:从零开始搭建第一个Vue项目
- 2024-11-16Vue3学习:新手入门教程与实践指南
- 2024-11-16Vue3学习:从入门到初级实战教程