1proc test_memory_efficiency {range} { 2 r flushall 3 set rd [redis_deferring_client] 4 set base_mem [s used_memory] 5 set written 0 6 for {set j 0} {$j < 10000} {incr j} { 7 set key key:$j 8 set val [string repeat A [expr {int(rand()*$range)}]] 9 $rd set $key $val 10 incr written [string length $key] 11 incr written [string length $val] 12 incr written 2 ;# A separator is the minimum to store key-value data. 13 } 14 for {set j 0} {$j < 10000} {incr j} { 15 $rd read ; # Discard replies 16 } 17 18 set current_mem [s used_memory] 19 set used [expr {$current_mem-$base_mem}] 20 set efficiency [expr {double($written)/$used}] 21 return $efficiency 22} 23 24start_server {tags {"memefficiency"}} { 25 foreach {size_range expected_min_efficiency} { 26 32 0.15 27 64 0.25 28 128 0.35 29 1024 0.75 30 16384 0.82 31 } { 32 test "Memory efficiency with values in range $size_range" { 33 set efficiency [test_memory_efficiency $size_range] 34 assert {$efficiency >= $expected_min_efficiency} 35 } 36 } 37} 38