1start_server {tags {"keyspace"}} { 2 test {DEL against a single item} { 3 r set x foo 4 assert {[r get x] eq "foo"} 5 r del x 6 r get x 7 } {} 8 9 test {Vararg DEL} { 10 r set foo1 a 11 r set foo2 b 12 r set foo3 c 13 list [r del foo1 foo2 foo3 foo4] [r mget foo1 foo2 foo3] 14 } {3 {{} {} {}}} 15 16 test {KEYS with pattern} { 17 foreach key {key_x key_y key_z foo_a foo_b foo_c} { 18 r set $key hello 19 } 20 lsort [r keys foo*] 21 } {foo_a foo_b foo_c} 22 23 test {KEYS to get all keys} { 24 lsort [r keys *] 25 } {foo_a foo_b foo_c key_x key_y key_z} 26 27 test {DBSIZE} { 28 r dbsize 29 } {6} 30 31 test {DEL all keys} { 32 foreach key [r keys *] {r del $key} 33 r dbsize 34 } {0} 35 36 test "DEL against expired key" { 37 r debug set-active-expire 0 38 r setex keyExpire 1 valExpire 39 after 1100 40 assert_equal 0 [r del keyExpire] 41 r debug set-active-expire 1 42 } 43 44 test {EXISTS} { 45 set res {} 46 r set newkey test 47 append res [r exists newkey] 48 r del newkey 49 append res [r exists newkey] 50 } {10} 51 52 test {Zero length value in key. SET/GET/EXISTS} { 53 r set emptykey {} 54 set res [r get emptykey] 55 append res [r exists emptykey] 56 r del emptykey 57 append res [r exists emptykey] 58 } {10} 59 60 test {Commands pipelining} { 61 set fd [r channel] 62 puts -nonewline $fd "SET k1 xyzk\r\nGET k1\r\nPING\r\n" 63 flush $fd 64 set res {} 65 append res [string match OK* [r read]] 66 append res [r read] 67 append res [string match PONG* [r read]] 68 format $res 69 } {1xyzk1} 70 71 test {Non existing command} { 72 catch {r foobaredcommand} err 73 string match ERR* $err 74 } {1} 75 76 test {RENAME basic usage} { 77 r set mykey hello 78 r rename mykey mykey1 79 r rename mykey1 mykey2 80 r get mykey2 81 } {hello} 82 83 test {RENAME source key should no longer exist} { 84 r exists mykey 85 } {0} 86 87 test {RENAME against already existing key} { 88 r set mykey a 89 r set mykey2 b 90 r rename mykey2 mykey 91 set res [r get mykey] 92 append res [r exists mykey2] 93 } {b0} 94 95 test {RENAMENX basic usage} { 96 r del mykey 97 r del mykey2 98 r set mykey foobar 99 r renamenx mykey mykey2 100 set res [r get mykey2] 101 append res [r exists mykey] 102 } {foobar0} 103 104 test {RENAMENX against already existing key} { 105 r set mykey foo 106 r set mykey2 bar 107 r renamenx mykey mykey2 108 } {0} 109 110 test {RENAMENX against already existing key (2)} { 111 set res [r get mykey] 112 append res [r get mykey2] 113 } {foobar} 114 115 test {RENAME against non existing source key} { 116 catch {r rename nokey foobar} err 117 format $err 118 } {ERR*} 119 120 test {RENAME where source and dest key are the same (existing)} { 121 r set mykey foo 122 r rename mykey mykey 123 } {OK} 124 125 test {RENAMENX where source and dest key are the same (existing)} { 126 r set mykey foo 127 r renamenx mykey mykey 128 } {0} 129 130 test {RENAME where source and dest key are the same (non existing)} { 131 r del mykey 132 catch {r rename mykey mykey} err 133 format $err 134 } {ERR*} 135 136 test {RENAME with volatile key, should move the TTL as well} { 137 r del mykey mykey2 138 r set mykey foo 139 r expire mykey 100 140 assert {[r ttl mykey] > 95 && [r ttl mykey] <= 100} 141 r rename mykey mykey2 142 assert {[r ttl mykey2] > 95 && [r ttl mykey2] <= 100} 143 } 144 145 test {RENAME with volatile key, should not inherit TTL of target key} { 146 r del mykey mykey2 147 r set mykey foo 148 r set mykey2 bar 149 r expire mykey2 100 150 assert {[r ttl mykey] == -1 && [r ttl mykey2] > 0} 151 r rename mykey mykey2 152 r ttl mykey2 153 } {-1} 154 155 test {DEL all keys again (DB 0)} { 156 foreach key [r keys *] { 157 r del $key 158 } 159 r dbsize 160 } {0} 161 162 test {DEL all keys again (DB 1)} { 163 r select 10 164 foreach key [r keys *] { 165 r del $key 166 } 167 set res [r dbsize] 168 r select 9 169 format $res 170 } {0} 171 172 test {MOVE basic usage} { 173 r set mykey foobar 174 r move mykey 10 175 set res {} 176 lappend res [r exists mykey] 177 lappend res [r dbsize] 178 r select 10 179 lappend res [r get mykey] 180 lappend res [r dbsize] 181 r select 9 182 format $res 183 } [list 0 0 foobar 1] 184 185 test {MOVE against key existing in the target DB} { 186 r set mykey hello 187 r move mykey 10 188 } {0} 189 190 test {MOVE against non-integer DB (#1428)} { 191 r set mykey hello 192 catch {r move mykey notanumber} e 193 set e 194 } {*ERR*index out of range} 195 196 test {MOVE can move key expire metadata as well} { 197 r select 10 198 r flushdb 199 r select 9 200 r set mykey foo ex 100 201 r move mykey 10 202 assert {[r ttl mykey] == -2} 203 r select 10 204 assert {[r ttl mykey] > 0 && [r ttl mykey] <= 100} 205 assert {[r get mykey] eq "foo"} 206 r select 9 207 } 208 209 test {MOVE does not create an expire if it does not exist} { 210 r select 10 211 r flushdb 212 r select 9 213 r set mykey foo 214 r move mykey 10 215 assert {[r ttl mykey] == -2} 216 r select 10 217 assert {[r ttl mykey] == -1} 218 assert {[r get mykey] eq "foo"} 219 r select 9 220 } 221 222 test {SET/GET keys in different DBs} { 223 r set a hello 224 r set b world 225 r select 10 226 r set a foo 227 r set b bared 228 r select 9 229 set res {} 230 lappend res [r get a] 231 lappend res [r get b] 232 r select 10 233 lappend res [r get a] 234 lappend res [r get b] 235 r select 9 236 format $res 237 } {hello world foo bared} 238 239 test {RANDOMKEY} { 240 r flushdb 241 r set foo x 242 r set bar y 243 set foo_seen 0 244 set bar_seen 0 245 for {set i 0} {$i < 100} {incr i} { 246 set rkey [r randomkey] 247 if {$rkey eq {foo}} { 248 set foo_seen 1 249 } 250 if {$rkey eq {bar}} { 251 set bar_seen 1 252 } 253 } 254 list $foo_seen $bar_seen 255 } {1 1} 256 257 test {RANDOMKEY against empty DB} { 258 r flushdb 259 r randomkey 260 } {} 261 262 test {RANDOMKEY regression 1} { 263 r flushdb 264 r set x 10 265 r del x 266 r randomkey 267 } {} 268 269 test {KEYS * two times with long key, Github issue #1208} { 270 r flushdb 271 r set dlskeriewrioeuwqoirueioqwrueoqwrueqw test 272 r keys * 273 r keys * 274 } {dlskeriewrioeuwqoirueioqwrueoqwrueqw} 275} 276