如何在JavaScript中初始化Redis中的位图

我需要在Redis中用一组4 * n位全部初始化一个大的位图,如果我这样做:

 var redis = require('redis'); var client = redis.createClient(); var n = 8; var mask = '\\x'; for (var i = 0; i < n; ++i) { mask += 'f'; } client.set('mybitmap', mask, callback); 

mybitmap被设置为xffffffff而不是所需的\xffffffff

任何想法如何逃避JavaScript中的反斜杠,以便我们不会在Redis中丢失它?

注意:我正在使用node_redis客户端。

看来,你不能只用“1”位使用redis客户端的位图。 事实上,如果你build立这样的string:

 var mask = ''; for (var i = 0; i < n; ++i) { mask += String.fromCharCode(0xffff); } 

在Redis中你会得到类似的东西:11101111 10111111 10111111 11101111 10111111 10111111 11101111 10111111 10111111 11101111 10111111

虽然我确保在Javascript中以下是正确的: String.fromCharCode(0xffff).toString().charCodeAt(0) === 0xffff

(因为这个https://stackoverflow.com/a/3482698/667433我有一些疑虑),在Node的Redis客户端和Redis之间的某些位丢失了&#x3002;

build立一个简单的“1”位图的解决scheme是把所有的“0”,并使用NOT

 var client = require('redis').createClient(); var n = 8; var mask = new Array(n + 1).join(String.fromCharCode(0)); client.set('mybitmap', mask, function() { client.bitop(['not', 'mybitmap', 'mybitmap'], displayBits); }); // Just to display what Redis actually stored. function displayBits() { var res = ''; (function getBit(idx) { if (idx === (n + 1) * 8) { console.log(res); client.quit(); return; } client.getbit(['mybitmap', idx], function(e, r) { res += r; if ((idx + 1) % 8 === 0) { res += '\n'; } getBit(idx + 1); }); })(0); } 

希望能帮助到你