From e6948b8f2847896d3c6443744a53f7c3f79a1984 Mon Sep 17 00:00:00 2001 From: antirez Date: Mon, 18 Feb 2019 12:39:00 +0100 Subject: [PATCH] showdist.rb utility for SRANDMEMBER analysis added. --- utils/srandmember/README.md | 2 ++ utils/srandmember/showdist.rb | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 utils/srandmember/README.md create mode 100644 utils/srandmember/showdist.rb 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}" +} -- GitLab