123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- start_server {tags {"maxmemory"}} {
- test "Without maxmemory small integers are shared" {
- r config set maxmemory 0
- r set a 1
- assert {[r object refcount a] > 1}
- }
- test "With maxmemory and non-LRU policy integers are still shared" {
- r config set maxmemory 1073741824
- r config set maxmemory-policy allkeys-random
- r set a 1
- assert {[r object refcount a] > 1}
- }
- test "With maxmemory and LRU policy integers are not shared" {
- r config set maxmemory 1073741824
- r config set maxmemory-policy allkeys-lru
- r set a 1
- r config set maxmemory-policy volatile-lru
- r set b 1
- assert {[r object refcount a] == 1}
- assert {[r object refcount b] == 1}
- r config set maxmemory 0
- }
- foreach policy {
- allkeys-random allkeys-lru volatile-lru volatile-random volatile-ttl
- } {
- test "maxmemory - is the memory limit honoured? (policy $policy)" {
- # make sure to start with a blank instance
- r flushall
- # Get the current memory limit and calculate a new limit.
- # We just add 100k to the current memory size so that it is
- # fast for us to reach that limit.
- set used [s used_memory]
- set limit [expr {$used+100*1024}]
- r config set maxmemory $limit
- r config set maxmemory-policy $policy
- # Now add keys until the limit is almost reached.
- set numkeys 0
- while 1 {
- r setex [randomKey] 10000 x
- incr numkeys
- if {[s used_memory]+4096 > $limit} {
- assert {$numkeys > 10}
- break
- }
- }
- # If we add the same number of keys already added again, we
- # should still be under the limit.
- for {set j 0} {$j < $numkeys} {incr j} {
- r setex [randomKey] 10000 x
- }
- assert {[s used_memory] < ($limit+4096)}
- }
- }
- foreach policy {
- allkeys-random allkeys-lru volatile-lru volatile-random volatile-ttl
- } {
- test "maxmemory - only allkeys-* should remove non-volatile keys ($policy)" {
- # make sure to start with a blank instance
- r flushall
- # Get the current memory limit and calculate a new limit.
- # We just add 100k to the current memory size so that it is
- # fast for us to reach that limit.
- set used [s used_memory]
- set limit [expr {$used+100*1024}]
- r config set maxmemory $limit
- r config set maxmemory-policy $policy
- # Now add keys until the limit is almost reached.
- set numkeys 0
- while 1 {
- r set [randomKey] x
- incr numkeys
- if {[s used_memory]+4096 > $limit} {
- assert {$numkeys > 10}
- break
- }
- }
- # If we add the same number of keys already added again and
- # the policy is allkeys-* we should still be under the limit.
- # Otherwise we should see an error reported by Redis.
- set err 0
- for {set j 0} {$j < $numkeys} {incr j} {
- if {[catch {r set [randomKey] x} e]} {
- if {[string match {*used memory*} $e]} {
- set err 1
- }
- }
- }
- if {[string match allkeys-* $policy]} {
- assert {[s used_memory] < ($limit+4096)}
- } else {
- assert {$err == 1}
- }
- }
- }
- foreach policy {
- volatile-lru volatile-random volatile-ttl
- } {
- test "maxmemory - policy $policy should only remove volatile keys." {
- # make sure to start with a blank instance
- r flushall
- # Get the current memory limit and calculate a new limit.
- # We just add 100k to the current memory size so that it is
- # fast for us to reach that limit.
- set used [s used_memory]
- set limit [expr {$used+100*1024}]
- r config set maxmemory $limit
- r config set maxmemory-policy $policy
- # Now add keys until the limit is almost reached.
- set numkeys 0
- while 1 {
- # Odd keys are volatile
- # Even keys are non volatile
- if {$numkeys % 2} {
- r setex "key:$numkeys" 10000 x
- } else {
- r set "key:$numkeys" x
- }
- if {[s used_memory]+4096 > $limit} {
- assert {$numkeys > 10}
- break
- }
- incr numkeys
- }
- # Now we add the same number of volatile keys already added.
- # We expect Redis to evict only volatile keys in order to make
- # space.
- set err 0
- for {set j 0} {$j < $numkeys} {incr j} {
- catch {r setex "foo:$j" 10000 x}
- }
- # We should still be under the limit.
- assert {[s used_memory] < ($limit+4096)}
- # However all our non volatile keys should be here.
- for {set j 0} {$j < $numkeys} {incr j 2} {
- assert {[r exists "key:$j"]}
- }
- }
- }
- }
|