以下代碼將整個數組保存爲redis列表中的單個值。但我想單獨保存數組值。我該怎麼做?如何將javascript數組保存爲redis列表
P.S對不起英文不好。
var redis = require('redis'),
client = redis.createClient();
var arr = [1,2,3];
client.rpush('testlist',arr);
以下代碼將整個數組保存爲redis列表中的單個值。但我想單獨保存數組值。我該怎麼做?如何將javascript數組保存爲redis列表
P.S對不起英文不好。
var redis = require('redis'),
client = redis.createClient();
var arr = [1,2,3];
client.rpush('testlist',arr);
使用multi()
流水線多個命令一次:
var redis = require('redis'),
client = redis.createClient();
var arr = [1,2,3];
var multi = client.multi()
for (var i=0; i<arr.length; i++) {
multi.rpush('testlist', arr[i]);
}
multi.exec(function(errors, results) {
})
最後調用exec()
發送命令Redis的。
使用不適合我的redis-node,稍作修改:https://gist.github.com/vainrobot/141b2162e1200f7c7855 – fullstacklife
如何恢復它?正常get不起作用。 – jeevs
@jeevs'lrange testlist 0 -1' https://redis.io/commands/lrange – MyMomSaysIamSpecial
即使@gimenete答案的作品,做你想要什麼,最好的辦法是列表元素轉發作爲參數傳遞給RPUSH像這樣:
var redis = require('redis'),
client = redis.createClient();
var arr = [1,2,3];
client.rpush.apply(client, ['testlist'].concat(arr));
// ... or with a callback
client.rpush.apply(client, ['testlist'].concat(arr).concat(function(err, ok){
console.log(err, ok);
}));
優點: - 單指令會transmited到Redis的
缺點: - 一個極端情況:.apply
將拋出一個RangeError: Maximum call stack size exceeded
如果傳遞給RPUSH參數列表長度過大(有點OVE v8的100 000個項目)。
從MDC:
The consequences of applying a function with too many arguments (think more than tens of thousands of arguments) vary across engines (JavaScriptCore has hard-coded argument limit of 65536), because the limit (indeed even the nature of any excessively-large-stack behavior) is unspecified. Some engines will throw an exception. More perniciously, others will arbitrarily limit the number of arguments actually passed to the applied function.
不適合我。 '錯誤:'rpush'命令的參數ERR錯誤。 – user2522545
我再次測試它,它的工作原理,你使用了什麼代碼? – FGRibreau
與您輸入的完全一致。我的節點js文件中沒有其他代碼。 – user2522545
你想通過數組元素迭代並單獨插入。你可以寫一個簡單的for循環或使用Array.prototype.forEach。 – fardjad