showdist.rb utility for SRANDMEMBER analysis added.

This commit is contained in:
antirez 2019-02-18 12:39:00 +01:00
parent 86802d4f26
commit e6948b8f28
2 changed files with 35 additions and 0 deletions

View File

@ -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.

View File

@ -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}"
}