gpt4 book ai didi

redis bitset -- 如何上传现有的 bitset 数组

转载 作者:可可西里 更新时间:2023-11-01 11:20:24 25 4
gpt4 key购买 nike

我有大量的 bitset 数据,存储在 db 中。我想把它上传到redis bitset,这样我就可以对其进行位操作了。有没有办法从 redis-cli 或 javascript 代码上传这些数据?我正在使用 bitset.js npm 模块从 db 加载我的程序中的位集。

一个明显的方法是在我的 javascript 代码中迭代我的 bitset 数组并多次调用 redis.setbit(...)。有没有办法一次上传所有这些?如果是怎么办?

最佳答案

Redis中的bitset其实就是一个字符串,所以可以一次性直接赋值给它。字符串中的位是位域的位,按从左到右的顺序设置。 IE。将位号 0 设置为 1 会产生二进制数 10000000,或值为 128 的单个字节。这在 Redis 打印时看起来像 "\x80",您可以通过运行 setbit foo 0 1 然后在 Redis 中运行 get foo 自己看看。

因此,要构造正确的字符串以发送到 Redis,我们只需要从您的 BitSet 中读取位并构造一个缓冲区,一次一个字节,并设置适当的位。

下面是使用 bitset.js 和 redis npm 模块将 JavaScript 中的 BitSet 转换为 Redis key 的代码。请注意,此代码假定位域适合内存。

let redis = require('redis'),
BitSet = require('./bitset');

let client = redis.createClient();

// create some data
let bs = new BitSet;
bs.set(0, 1);
bs.set(31, 1);

// calculate how many bytes we'll need
var numBytes = Math.ceil(bs.msb()/8);
// construct a buffer with that much space
var buffer = new Buffer(numBytes);

// for each byte
for (var i = 0; i < numBytes; i++) {
var byte = 0;

// iterate over each bit
for (var j = 0; j < 8; j++) {
// slide previous bits to the left
byte <<= 1;
// and set the rightmost bit
byte |= bs.get(i*8+j);
}

// put this byte in the buffer
buffer[i] = byte;
}

// now we have a complete buffer to use as our value in Redis
client.set('bitset', buffer, function (err, result) {
client.getbit('bitset', 31, function (err, result) {
console.log('Bit 31 = ' + result);
client.del('bitset', function () {
client.quit();
});
});
});

关于redis bitset -- 如何上传现有的 bitset 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37811613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com