我们现在,简单地,redis

了解更多

RedisJSON:一个RedisJSON存储



回到博客

redis json图像与redis堆栈

准备好直接跳入RedisJSON了吗?退房开始使用JSON在Redis开发者网站上!

-

redisjson.是一个提供本机JSON功能的Redis模块,只需运行Docker图像对于带有RedisJSON的Redis,请访问github存储库,或阅读在线文档

JSON和REDIS都不需要介绍;前者是标准数据交换格式之间现代应用,而后者是无处不在的,无论需要执行数据管理吗?经过他们。在这种情况下,几年前当我得知两人相处不好时,我感到震惊。

redis不是一个捣蛋的小马 - 事实上,它相当相反。Unlike general purpose one-size-fits-all databases, Redis (a.k.a the “Swiss Army Knife of Databases,” “Super Glue of Microservices.” and “Execution context of Functions-as-a-Service”) provides specialized tools for specific tasks. Developers use these tools, which are exposed as abstract data structures and their accompanying operations, to model optimal solutions for problems. And that is exactly the reason why using Redis for managing JSON data is unnatural. So how do we use the RedisJSON module?

事实:尽管它众多的核心数据结构,但Redis没有符合JSON值的要求。当然,您可以使用其他数据类型来解决此问题:字符串很棒,用于存储原始的序列化JSON,您可以表示具有哈希的平面JSON对象。但这些解决方法模式施加限制,使它们仅在少数用例中有用,甚至那么该体验留下了一个缺陷的缺陷。他们的尴尬急剧冲突,通常使用Redis的简单和优雅。

但在那之后的最后一年,一切都发生了变化萨尔瓦托尔·桑菲利波的安特里兹酒店访问Redis'Tel Aviv Office,以及redis模块成为现实。突然间,天空不再是极限。现在模块让任何人做任何事情,结果证明我可能是那个特定的人。在超过一二十年来的崛起之后拿起C开发被证明不如我预期的那些噩梦Dvir Volk的@dvirsky我们与生俱来的爱的指引。

虽然你可能不会惊心自然,但我知道我不欢迎我不建议),Redisjson本身应该使任何redis用户眩晕与JSON Joy。该模块提供了一种新的数据类型,用于快速有效地操作JSON文档。与任何Redis数据类型一样,Redisjson的值存储在可以使用专门的命令子集访问的键中。这些命令或模块公开的API旨在直观地从JSON世界到达redis的用户,反之亦然。考虑此示例,显示如何设置和获取值:

127.0.0.1:6379> json.set标量。'“Hello Json!”'OK 127.0.0.1:6379> JSON.SET对象。'{“foo”:“bar”,“ans”:42}'ok 127.0.0.1:6379> json.get对象“{”foo“:”bar“,”ans“:42}”127.0.0.1:6379> json.get对象.ans“42”127.0.0.1:6379> ^ c〜$

与任何表现良好的模块一样,RedisJSON的命令都带有前缀。二者都JSON.SETJSON.GET期待关键的名称是他们的第一个论点。在第一行中,我们设置了root(由句号字符表示:“。”)所指的密钥标量子到字符串值。接下来,命名为一个不同的钥匙目的使用JSON对象(首先读取整体),然后按路径为单个子元素。

在引擎盖下会发生什么,无论何时都会打电话JSON.SET,模块通过流式lexer获取值,流式lexer解析输入JSON并从中构建树数据结构:

redis json命令

Redisjson以树节点中的二进制格式存储数据,并支持一个子集JSONPath便于子元素的引用。它拥有为每种JSON值类型定制的原子命令库,包括:json.strapmend.用于附加字符串;JSON.NUMMULTBY用于乘以数字;和json.Arrrim.修剪阵列......并使海盗快乐。所有与Redisjson。

由于redisjson实现为redis模块,因此您可以使用以下任何redis客户端,所以:a)支持模块(ATM无)或b)允许发送原始命令(大多数ATM)。例如,您可以使用Python代码中的redisjson启用的redis服务器使用redis-py.像这样:

导入redis import json data = {'foo':'bar','ans':42} r = redis.strictredis()r.execute_command('json.set','对象','。',json.dumps(数据))回复= json.loads(r.execute_command('json.get','对象'))

但那只是它的一半。Redisjson不仅是一个漂亮的API,它也是一种在性能方面的强国。初始性能基准已经证明,例如:

ReJSON json.lua msgpack lua速率图rejson json.lua msgpack lua平均延迟图

上面的图表比较了在具有三个嵌套级别的3.4KB JSON负载上执行的读写操作的速率(操作/秒)和平均延迟。RedisJSON与以字符串形式存储数据的两个变体相比较。这两个变量都实现为Redis服务器端Lua脚本,其中json.Lua变量存储原始序列化的json,msgpack.Lua使用MessagePack编码。

如果您有21分钟的空闲时间,下面是Redis Day TLV

你今天就可以开始玩RedisJSON了!

#docker run-d-p6379:6379——名称redis-rejson-redis/rejson:latest

我们仍有许多功能需要添加,但总的来说,RedisJSON非常简洁。如果您有功能请求或发现问题,请随时使用回购协议的问题跟踪器。你总是可以电子邮件推特对我来说,我很有空

准备好跳入RedisJSON了吗?退房开始使用JSON在Redis开发者网站上!

Baidu