mirror of
http://github.com/valkey-io/valkey
synced 2024-11-22 09:17:20 +00:00
82154ffab5
Closes #2005
113 lines
1.8 KiB
Ruby
113 lines
1.8 KiB
Ruby
require 'rubygems'
|
|
require 'redis'
|
|
|
|
r = Redis.new
|
|
r.config("SET","maxmemory","2000000")
|
|
r.config("SET","maxmemory-policy","allkeys-lru")
|
|
r.config("SET","maxmemory-samples",5)
|
|
r.config("RESETSTAT")
|
|
r.flushall
|
|
|
|
puts <<EOF
|
|
<html>
|
|
<body>
|
|
<style>
|
|
.box {
|
|
width:5px;
|
|
height:5px;
|
|
float:left;
|
|
margin: 1px;
|
|
}
|
|
|
|
.old {
|
|
border: 1px black solid;
|
|
}
|
|
|
|
.new {
|
|
border: 1px green solid;
|
|
}
|
|
|
|
.ex {
|
|
background-color: #666;
|
|
}
|
|
</style>
|
|
<pre>
|
|
EOF
|
|
|
|
# Fill
|
|
oldsize = r.dbsize
|
|
id = 0
|
|
while true
|
|
id += 1
|
|
r.set(id,"foo")
|
|
newsize = r.dbsize
|
|
break if newsize == oldsize
|
|
oldsize = newsize
|
|
end
|
|
|
|
inserted = r.dbsize
|
|
first_set_max_id = id
|
|
puts "#{r.dbsize} keys inserted"
|
|
|
|
# Access keys sequentially
|
|
|
|
puts "Access keys sequentially"
|
|
(1..first_set_max_id).each{|id|
|
|
r.get(id)
|
|
# sleep 0.001
|
|
}
|
|
|
|
# Insert more 50% keys. We expect that the new keys
|
|
half = inserted/2
|
|
puts "Insert enough keys to evict half the keys we inserted"
|
|
add = 0
|
|
while true
|
|
add += 1
|
|
id += 1
|
|
r.set(id,"foo")
|
|
break if r.info['evicted_keys'].to_i >= half
|
|
end
|
|
|
|
puts "#{add} additional keys added."
|
|
puts "#{r.dbsize} keys in DB"
|
|
|
|
# Check if evicted keys respect LRU
|
|
# We consider errors from 1 to N progressively more serious as they violate
|
|
# more the access pattern.
|
|
|
|
errors = 0
|
|
e = 1
|
|
edecr = 1.0/(first_set_max_id/2)
|
|
(1..(first_set_max_id/2)).each{|id|
|
|
e -= edecr if e > 0
|
|
e = 0 if e < 0
|
|
if r.exists(id)
|
|
errors += e
|
|
end
|
|
}
|
|
|
|
puts "#{errors} errors!"
|
|
puts "</pre>"
|
|
|
|
# Generate the graphical representation
|
|
(1..id).each{|id|
|
|
# Mark first set and added items in a different way.
|
|
c = "box"
|
|
if id <= first_set_max_id
|
|
c << " old"
|
|
else
|
|
c << " new"
|
|
end
|
|
|
|
# Add class if exists
|
|
c << " ex" if r.exists(id)
|
|
puts "<div class=\"#{c}\"></div>"
|
|
}
|
|
|
|
# Close HTML page
|
|
|
|
puts <<EOF
|
|
</body>
|
|
</html>
|
|
EOF
|