Nodejs环境下redis中的一个简单问题

Nodejs环境下redis中的一个简单问题

我尝试了node_redis中的set和get操作。发现set时如果传的是一个object,在get的时候得到的确实一个字符串。如果是一个array,得到的也是一个字符串。

是不是node_redis只能存字符串数据? 我想set什么类型数据,就get什么类型数据,怎么办?

4 回复

当然可以。在 Node.js 环境下使用 Redis 时,Redis 本身是键值存储系统,它只支持存储字符串、数字或二进制安全的字节序列(即字节数组)。这意味着当你使用 node_redis 将 JavaScript 对象或数组存储到 Redis 中时,这些对象会被自动转换为 JSON 字符串形式。

示例代码

假设你有一个简单的 JavaScript 对象或数组,你想将其存储到 Redis 中,并在之后检索出来。

const redis = require('redis');
const client = redis.createClient();

// 检查错误
client.on('error', (err) => {
    console.error(`Error ${err}`);
});

// 存储一个对象到 Redis
const myObject = { name: 'John Doe', age: 30 };
const myArray = [1, 2, 3, 4];

client.set('myObjectKey', JSON.stringify(myObject), redis.print);
client.set('myArrayKey', JSON.stringify(myArray), redis.print);

// 获取并解析对象
client.get('myObjectKey', (err, reply) => {
    if (err) throw err;
    const retrievedObject = JSON.parse(reply);
    console.log(retrievedObject); // 输出:{ name: 'John Doe', age: 30 }
});

// 获取并解析数组
client.get('myArrayKey', (err, reply) => {
    if (err) throw err;
    const retrievedArray = JSON.parse(reply);
    console.log(retrievedArray); // 输出:[ 1, 2, 3, 4 ]
});

解释

  1. 创建 Redis 客户端:首先,我们需要创建一个 Redis 客户端实例。
  2. 设置键值对:使用 client.set() 方法将对象或数组存储到 Redis 中。由于 Redis 只能存储字符串,我们使用 JSON.stringify() 方法将对象或数组转换为 JSON 字符串。
  3. 获取键值对:使用 client.get() 方法从 Redis 中获取存储的数据。因为返回的数据仍然是 JSON 字符串,所以我们需要使用 JSON.parse() 方法将其转换回原始的 JavaScript 对象或数组。

通过这种方式,你可以确保存储的数据类型与你最初设置的数据类型一致。


查了下,好像redis本身只能以字符串形式存储,就只能用JSON.stringify 和 JSON.parse 来处理了

嗯,封装一下

在 Node.js 环境下使用 node_redis 模块时,Redis 本身只支持存储字符串、数字或二进制数据。因此,当你使用 set 方法存储一个对象或数组时,实际上这些对象会被序列化为 JSON 字符串。

为了实现你所描述的需求——即希望 setget 操作后数据类型保持一致,你需要手动进行序列化和反序列化。常用的序列化方法是 JSON.stringify 和 JSON.parse。

示例代码

const redis = require("redis");
const client = redis.createClient();

// 设置值之前将对象序列化为 JSON 字符串
const myObject = { key: "value" };
client.set('myKey', JSON.stringify(myObject), (err) => {
    if (err) throw err;
    console.log('Object set successfully');
});

// 获取值之后将 JSON 字符串反序列化为对象
client.get('myKey', (err, reply) => {
    if (err) throw err;
    const retrievedObject = JSON.parse(reply);
    console.log(retrievedObject); // 输出:{ key: 'value' }
    client.quit();
});

解释

  1. 设置键值对:首先,我们使用 JSON.stringify 将对象转换成字符串,然后通过 Redis 的 set 命令将其存储。
  2. 获取键值对:当从 Redis 中获取值时,实际得到的是一个 JSON 格式的字符串。这时需要使用 JSON.parse 来将字符串转换回原始的对象或数组。

通过这种方式,你可以确保无论是在设置还是获取数据时,数据类型的一致性都能得到保障。

回到顶部