Node.js 将字符串数据与压缩(缓冲区)数据一起存储在Redis上
是否有可能将缓冲区数据与字符串数据一起存储在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
// 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慢,所以折衷是原始速度和存储需求)。还有,再次感谢。我去看看。