node.js - 将字符串数据与压缩(缓冲)数据一起存储在 Redis 上

标签 node.js redis ioredis

有没有机会把Buffer数据和字符串数据一起存储在Redis上。

伪代码:

// Data compression
var user = { name: "Xyz" }
var userString = JSON.stringify(user)
var userBuffer = new Buffer(userString, "utf8")
var compressed = zlib.gzip(userBuffer)
// Adding data onto Redis
var data = { id: 1, compressed: compressed }
var dataString = JSON.stringify(data)
redis.set("test", dataString)

虽然这似乎不可能,但我想问。

有没有机会把压缩后的数据和字符串一起存储?

编辑:

将压缩数据和未压缩数据存储在同一个 key 中后,无法解压上面的用户数据。

伪代码:

var dataString = redis.get("test")
var data = JSON.parse(dataString)
console.log(data) 
// writes { id:1, compressed: { type: Buffer, data: [31, 139, 8...] } }

var compressed = data.compressed
var user = zlib.gunzip(compressed)
// user would be undefined here

最佳答案

const zlib     = require('zlib');
const redis    = require('redis').createClient();
var user       = { name: "Xyz" }
var userString = JSON.stringify(user)
var userBuffer = new Buffer(userString, "utf8")
var compressed = zlib.gzipSync(userBuffer)
var data       = { id: 1, compressed: compressed }
var dataString = JSON.stringify(data)

console.log('Compressed', dataString);
redis.set('mykey', dataString, err => {
  if (err) throw err;
  redis.get('mykey', (err, dataString) => {
    if (err) throw err;

    var data         = JSON.parse(dataString)
    var buffer       = Buffer.from(data.compressed);
    var uncompressed = zlib.gunzipSync(buffer);

    console.log('Uncompressed', JSON.parse(uncompressed));
    redis.end(false);
  })
});

关键是在解压缩之前将 Buffer 的字符串表示形式转换回正确的实例(使用 Buffer.from())。

但是,Buffer 的 JSON 表示形式不是很简洁,因此您可能应该研究一种在 Redis 中存储数据的替代方法(一种不需要字符串化的方法)缓冲区)。也许使用 a hash .

关于node.js - 将字符串数据与压缩(缓冲)数据一起存储在 Redis 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43812716/

相关文章:

node.js - 使用 browserify 使 bower 与 npm 一起工作

node.js - seriate Node js 如何关闭连接

redis - 获取 redis 过期通知的值(value)

python - 使用Supervisor启动Huey(Redis Celery)消费者

node.js - 使用ioredis向redis发送任意命令

node.js - 在 Dialogflow Fulfillment 中使用第三方 API

node.js - 如何将 mongoDB 与 Node 一起使用

c# - StackExchange Redis - StringSet 与 SetAdd 和过期

docker - Redis Windows 错误 : connect ECONNREFUSED 127. 0.0.1:6379 但应用程序正在运行

node.js - 使用 ioredis 在单个原子操作中发送多个 BITOP