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

Mopparthy Ravindranath

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

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

用户名

Redis中的位集实际上只是一个字符串,因此您可以一次直接分配给它。字符串中的位是位字段的位,以从左到右的顺序设置。即,将位号0设置为1会产生二进制数10000000,或单个字节,其值为128。这看起来像是"\x80"Redis打印它时一样,您可以先运行setbit foo 0 1然后get foo在Redis中查看

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

以下是使用bitset.js和redis npm模块将JavaScript中的BitSet转换为Redis密钥的代码。请注意,此代码假定该位字段适合放入内存。

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();
        });
    });
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章