redis 0.6.7 → 0.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.npmignore +1 -0
- package/README.md +172 -48
- package/{tests → benches}/buffer_bench.js +0 -0
- package/benches/hiredis_parser.js +38 -0
- package/benches/re_sub_test.js +14 -0
- package/{tests → benches}/reconnect_test.js +4 -2
- package/{tests → benches}/stress/codec.js +0 -0
- package/{tests → benches}/stress/pubsub/pub.js +0 -0
- package/{tests → benches}/stress/pubsub/run +0 -0
- package/{tests → benches}/stress/pubsub/server.js +0 -0
- package/{tests → benches}/stress/rpushblpop/pub.js +0 -0
- package/{tests → benches}/stress/rpushblpop/run +0 -0
- package/{tests → benches}/stress/rpushblpop/server.js +0 -0
- package/{tests → benches}/stress/speed/00 +0 -0
- package/{tests → benches}/stress/speed/plot +0 -0
- package/{tests → benches}/stress/speed/size-rate.png +0 -0
- package/{tests → benches}/stress/speed/speed.js +0 -0
- package/{tests → benches}/sub_quit_test.js +0 -0
- package/changelog.md +35 -0
- package/diff_multi_bench_output.js +87 -0
- package/{eval_test.js → examples/eval.js} +0 -0
- package/examples/simple.js +9 -2
- package/examples/sort.js +17 -0
- package/generate_commands.js +0 -1
- package/index.js +467 -214
- package/lib/commands.js +22 -1
- package/lib/parser/hiredis.js +15 -10
- package/lib/parser/javascript.js +14 -13
- package/lib/queue.js +5 -2
- package/lib/util.js +10 -5
- package/mem.js +11 -0
- package/multi_bench.js +197 -107
- package/package.json +6 -13
- package/test.js +465 -95
- package/simple_test.js +0 -3
- package/tests/test_start_stop.js +0 -17
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
var colors = require('colors'),
|
|
4
|
+
fs = require('fs'),
|
|
5
|
+
_ = require('underscore'),
|
|
6
|
+
metrics = require('metrics'),
|
|
7
|
+
|
|
8
|
+
// `node diff_multi_bench_output.js before.txt after.txt`
|
|
9
|
+
before = process.argv[2],
|
|
10
|
+
after = process.argv[3];
|
|
11
|
+
|
|
12
|
+
if (!before || !after) {
|
|
13
|
+
console.log('Please supply two file arguments:');
|
|
14
|
+
var n = __filename;
|
|
15
|
+
n = n.substring(n.lastIndexOf('/', n.length));
|
|
16
|
+
console.log(' ./' + n + ' multiBenchBefore.txt multiBenchAfter.txt');
|
|
17
|
+
console.log('To generate multiBenchBefore.txt, run');
|
|
18
|
+
console.log(' node multi_bench.js > multiBenchBefore.txt');
|
|
19
|
+
console.log('Thank you for benchmarking responsibly.');
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
var before_lines = fs.readFileSync(before, 'utf8').split('\n'),
|
|
24
|
+
after_lines = fs.readFileSync(after, 'utf8').split('\n');
|
|
25
|
+
|
|
26
|
+
console.log('Comparing before,', before.green, '(', before_lines.length,
|
|
27
|
+
'lines)', 'to after,', after.green, '(', after_lines.length, 'lines)');
|
|
28
|
+
|
|
29
|
+
var total_ops = new metrics.Histogram.createUniformHistogram();
|
|
30
|
+
|
|
31
|
+
before_lines.forEach(function(b, i) {
|
|
32
|
+
var a = after_lines[i];
|
|
33
|
+
if (!a || !b || !b.trim() || !a.trim()) {
|
|
34
|
+
// console.log('#ignored#', '>'+a+'<', '>'+b+'<');
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
b_words = b.split(' ').filter(is_whitespace);
|
|
39
|
+
a_words = a.split(' ').filter(is_whitespace);
|
|
40
|
+
|
|
41
|
+
var ops =
|
|
42
|
+
[b_words, a_words]
|
|
43
|
+
.map(function(words) {
|
|
44
|
+
// console.log(words);
|
|
45
|
+
return parseInt10(words.slice(-2, -1));
|
|
46
|
+
}).filter(function(num) {
|
|
47
|
+
var isNaN = !num && num !== 0;
|
|
48
|
+
return !isNaN;
|
|
49
|
+
});
|
|
50
|
+
if (ops.length != 2) return
|
|
51
|
+
|
|
52
|
+
var delta = ops[1] - ops[0];
|
|
53
|
+
|
|
54
|
+
total_ops.update(delta);
|
|
55
|
+
|
|
56
|
+
delta = humanize_diff(delta);
|
|
57
|
+
console.log(
|
|
58
|
+
// name of test
|
|
59
|
+
command_name(a_words) == command_name(b_words)
|
|
60
|
+
? command_name(a_words) + ':'
|
|
61
|
+
: '404:',
|
|
62
|
+
// results of test
|
|
63
|
+
ops.join(' -> '), 'ops/sec (∆', delta, ')');
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
console.log('Mean difference in ops/sec:', humanize_diff(total_ops.mean()));
|
|
67
|
+
|
|
68
|
+
function is_whitespace(s) {
|
|
69
|
+
return !!s.trim();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function parseInt10(s) {
|
|
73
|
+
return parseInt(s, 10);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// green if greater than 0, red otherwise
|
|
77
|
+
function humanize_diff(num) {
|
|
78
|
+
if (num > 0) {
|
|
79
|
+
return ('+' + num).green;
|
|
80
|
+
}
|
|
81
|
+
return ('' + num).red;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function command_name(words) {
|
|
85
|
+
var line = words.join(' ');
|
|
86
|
+
return line.substr(0, line.indexOf(','));
|
|
87
|
+
}
|
|
File without changes
|
package/examples/simple.js
CHANGED
|
@@ -2,16 +2,23 @@ var redis = require("redis"),
|
|
|
2
2
|
client = redis.createClient();
|
|
3
3
|
|
|
4
4
|
client.on("error", function (err) {
|
|
5
|
-
console.log("
|
|
5
|
+
console.log("error event - " + client.host + ":" + client.port + " - " + err);
|
|
6
6
|
});
|
|
7
7
|
|
|
8
8
|
client.set("string key", "string val", redis.print);
|
|
9
9
|
client.hset("hash key", "hashtest 1", "some value", redis.print);
|
|
10
10
|
client.hset(["hash key", "hashtest 2", "some other value"], redis.print);
|
|
11
11
|
client.hkeys("hash key", function (err, replies) {
|
|
12
|
+
if (err) {
|
|
13
|
+
return console.error("error response - " + err);
|
|
14
|
+
}
|
|
15
|
+
|
|
12
16
|
console.log(replies.length + " replies:");
|
|
13
17
|
replies.forEach(function (reply, i) {
|
|
14
18
|
console.log(" " + i + ": " + reply);
|
|
15
19
|
});
|
|
16
|
-
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
client.quit(function (err, res) {
|
|
23
|
+
console.log("Exiting from quit command.");
|
|
17
24
|
});
|
package/examples/sort.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
var redis = require("redis"),
|
|
2
|
+
client = redis.createClient();
|
|
3
|
+
|
|
4
|
+
client.sadd("mylist", 1);
|
|
5
|
+
client.sadd("mylist", 2);
|
|
6
|
+
client.sadd("mylist", 3);
|
|
7
|
+
|
|
8
|
+
client.set("weight_1", 5);
|
|
9
|
+
client.set("weight_2", 500);
|
|
10
|
+
client.set("weight_3", 1);
|
|
11
|
+
|
|
12
|
+
client.set("object_1", "foo");
|
|
13
|
+
client.set("object_2", "bar");
|
|
14
|
+
client.set("object_3", "qux");
|
|
15
|
+
|
|
16
|
+
client.sort("mylist", "by", "weight_*", "get", "object_*", redis.print);
|
|
17
|
+
// Prints Reply: qux,foo,bar
|