将string数据与压缩(缓冲)数据一起存储在Redis上

是否有机会在Redis上将Buffer数据与string数据一起存储。

伪代码:

// 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) 

虽然看起来不可能我想问。

有没有机会一起存储压缩数据?

编辑:

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

伪代码:

 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的string表示转换回正确的实例,然后解压(使用Buffer.from() )。

然而,一个Buffer的JSON表示并不是非常简洁,所以你可能应该考虑在Redis中存储数据的一种替代方法(在这个方法中,你不需要将缓冲区串联起来)。 也许使用散列 。