diff options
author | antirez <antirez@gmail.com> | 2019-02-18 12:39:00 +0100 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2019-02-18 12:39:07 +0100 |
commit | e6948b8f2847896d3c6443744a53f7c3f79a1984 (patch) | |
tree | 9de2f464dec3c4e7a9f2ef1c3681d9690971c46c | |
parent | 86802d4f2681baa04869fabfbd0ca6c2fe0a94d7 (diff) | |
download | redis-e6948b8f2847896d3c6443744a53f7c3f79a1984.tar.gz |
showdist.rb utility for SRANDMEMBER analysis added.
-rw-r--r-- | utils/srandmember/README.md | 2 | ||||
-rw-r--r-- | utils/srandmember/showdist.rb | 33 |
2 files changed, 35 insertions, 0 deletions
diff --git a/utils/srandmember/README.md b/utils/srandmember/README.md new file mode 100644 index 000000000..e6dae5ba8 --- /dev/null +++ b/utils/srandmember/README.md @@ -0,0 +1,2 @@ +This utility plots the distribution of SRANDMEMBER to evaluate how fair it is. +See http://theshfl.com/redis_sets for more information on the topic. diff --git a/utils/srandmember/showdist.rb b/utils/srandmember/showdist.rb new file mode 100644 index 000000000..243585700 --- /dev/null +++ b/utils/srandmember/showdist.rb @@ -0,0 +1,33 @@ +require 'redis' + +r = Redis.new +r.select(9) +r.del("myset"); +r.sadd("myset",(0..999).to_a) +freq = {} +100.times { + res = r.pipelined { + 1000.times { + r.srandmember("myset") + } + } + res.each{|ele| + freq[ele] = 0 if freq[ele] == nil + freq[ele] += 1 + } +} + +# Convert into frequency distribution +dist = {} +freq.each{|item,count| + dist[count] = 0 if dist[count] == nil + dist[count] += 1 +} + +min = dist.keys.min +max = dist.keys.max +(min..max).each{|x| + count = dist[x] + count = 0 if count == nil + puts "#{x} -> #{"*"*count}" +} |