showdist.rb utility for SRANDMEMBER analysis added.
This commit is contained in:
parent
86802d4f26
commit
e6948b8f28
2
utils/srandmember/README.md
Normal file
2
utils/srandmember/README.md
Normal 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.
|
33
utils/srandmember/showdist.rb
Normal file
33
utils/srandmember/showdist.rb
Normal 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}"
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user