将字符串数据与压缩(缓冲)数据一起存储在 Redis 上
Storing string data with compressed (buffer) data together on Redis
有没有机会把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)
虽然好像不可能想问
有没有机会把压缩后的数据和字符串一起存储?
编辑:
将压缩数据和未压缩数据存储在同一个密钥中后,无法解压上面的用户数据。
伪代码:
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.
有没有机会把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)
虽然好像不可能想问
有没有机会把压缩后的数据和字符串一起存储?
编辑:
将压缩数据和未压缩数据存储在同一个密钥中后,无法解压上面的用户数据。
伪代码:
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.