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

Node.js 将字符串数据与压缩(缓冲区)数据一起存储在Redis上,node.js,redis,ioredis,Node.js,Redis,Ioredis,是否有可能将缓冲区数据与字符串数据一起存储在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

是否有可能将缓冲区数据与字符串数据一起存储在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)
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
虽然这似乎不可能,但我想问

是否有机会将压缩数据与字符串存储在一起

编辑:

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

伪代码:

// 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
关键是在解压之前将缓冲区的字符串表示形式转换回正确的实例(使用
Buffer.from()

然而,
缓冲区的JSON表示形式并不十分简洁,因此您可能应该研究另一种在Redis中存储数据的方法(不必对缓冲区进行字符串化)。也许是用

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


然而,
缓冲区的JSON表示形式并不十分简洁,因此您可能应该研究另一种在Redis中存储数据的方法(不必对缓冲区进行字符串化)。可能是使用。

您在这里问的问题不太清楚。您的意思是希望压缩和未压缩的数据在同一个密钥中?你指的是什么字符串?应该有效-你得到了什么伪错误?@OliviaRuth实际上是的。我想在同一个键中存储压缩和未压缩的数据。@ItamarHaber我已经编辑了这个问题。我想,我无法从Redis
设置
获取
作为
缓冲区
。如果我压缩所有数据,我可以得到所有数据,并且我可以成功地解压缩所有数据。我尝试了
ioredis
node\u redis
库。我想一个
键上只能存储一种数据类型。因为在读取数据时,库必须决定读取的数据是否为
缓冲区
。@ItamarHaber还可能存在
JSON
解析和字符串化操作的问题。这里的问题不太清楚。您的意思是希望压缩和未压缩的数据在同一个密钥中?你指的是什么字符串?应该有效-你得到了什么伪错误?@OliviaRuth实际上是的。我想在同一个键中存储压缩和未压缩的数据。@ItamarHaber我已经编辑了这个问题。我想,我无法从Redis
设置
获取
作为
缓冲区
。如果我压缩所有数据,我可以得到所有数据,并且我可以成功地解压缩所有数据。我尝试了
ioredis
node\u redis
库。我想一个
键上只能存储一种数据类型。因为在读取数据时,库必须决定读取的数据是否为
缓冲区
。@ItamarHaber还可能存在
JSON
解析和字符串化操作的问题。非常感谢!事实上,我必须将压缩数据存储在一个排序集上。因为我认为如果我将这些静态数据存储为压缩数据,我可以直接发送到客户端(每个用户每次都不需要压缩)。考虑到CPU成本和时间复杂性,这可能是有益的。如果您使用集合,可能不应该使用JSON,而是类似的,以防止缓冲区被编码为基于字符串的对象(尽管
msgpack
比JSON慢,所以折衷是原始速度和存储需求)。还有,再次感谢。我去看看。非常感谢!事实上,我必须将压缩数据存储在一个排序集上。因为我认为如果我将这些静态数据存储为压缩数据,我可以直接发送到客户端(每个用户每次都不需要压缩)。考虑到CPU成本和时间复杂性,这可能是有益的。如果您使用集合,可能不应该使用JSON,而是类似的,以防止缓冲区被编码为基于字符串的对象(尽管
msgpack
比JSON慢,所以折衷是原始速度和存储需求)。还有,再次感谢。我去看看。