我应该如何在redis中存储JSON?

tof*_*tim 24 redis node.js

我有通过node.js存储在Redis中的JSON(<1k).将其存储为对象或字符串有哪些优缺点?我错过了其他选择吗?所有处理最终都会在客户端进行,因此无需转换为对象.

var images = JSON.parse(data);          // data is already JSON, is this needed?
callback(images);                       // sends result to the user
r.set('images:' + req.query, images);   // saving the object
Run Code Online (Sandbox Code Playgroud)

得到

callback(images);
Run Code Online (Sandbox Code Playgroud)

yoj*_*o87 36

您可以将redis中的JSON存储为专用密钥(或集合/列表的成员/值)或散列结构中的纯字符串.如果你将node_redis文档看成Friendlier哈希命令部分,你会发现它为你提供了一些操作基于JSON的数据的有用方法.这种方法的优点在于它允许您仅获取/设置原始对象的一部分,并且与普通字符串相比,它也可能消耗更少的内存.

  • riendlier散列命令的链接https://github.com/mranney/node_redis#friendlier-hash-commands (3认同)

Guy*_*and 10

RedisJSON模块允许从 Redis 键存储、更新和获取 JSON 值。

它向 Redis 添加了新的 JSON 数据类型和命令,可以像任何其他 Redis 本机命令一样进行访问。

例如

> JSON.SET user1 $ '{"name":"Ron Dan", "lastSeen":1478476800, "loggedOut": true}'
OK

> JSON.GET user1 $.name
"[\"Ron Dan\"]"

> JSON.NUMINCRBY user1 $.lastSeen 100
"[1478476900]"
Run Code Online (Sandbox Code Playgroud)


Aka*_*abu 5

你可以使用这个库redis-json

示例使用示例:

import Redis from 'ioredis';
import JSONCache from 'redis-json';

const redis = new Redis();

const jsonCache = new JSONCache(redis)

const user = {
  name: "test",
  age: 21,
  gender: "male"
}
await jsonCache.set('123', user)

const result = await jsonCache.get('123')
Run Code Online (Sandbox Code Playgroud)

该库将 json 存储在哈希集中。

它还支持检索单个或一组密钥,即

await jsonCache.get('123', "age", "name")
Run Code Online (Sandbox Code Playgroud)