Probléma: Egy bizonyos szabály szerint szeretnél tömegesen kulcsokat törölni Redisből, de valamiért nem szeretnél LUA-t használni.
Megoldás: Hozzunk létre egy egyszerű for ciklust bash-ben, amely a redis-cli kimenetét fogja sorról-sorra végigjárni. A redis-cli az általunk megadott sablon szerint listázza a kulcsokat:
for i in `redis-cli --raw keys "kulcs:*"`; do redis-cli del $i; done
Fontos: Amennyiben olyan Redis klasztered van, amelyben több master található, akkor az összes olyan Redis példányon futtatni kell a parancsot, ahol jelen van a kulcs.
Példa:
Hozzunk létre néhány kulcsot Redisben, pl. redis-cli segítségével:
127.0.0.1:6379> set aa:bb:cc:1 1 OK 127.0.0.1:6379> set aa:bb:cc:2 1 OK 127.0.0.1:6379> set aa:bb:cc:3 1 OK 127.0.0.1:6379> set aa:bb:cc:4 1 OK 127.0.0.1:6379> set aa:bb:cc:5 1 OK 127.0.0.1:6379> set aa:bb:cc:6 1 OK 127.0.0.1:6379> set aa:bb:cc:7 1 OK 127.0.0.1:6379> set aa:bb:qq:1 1 OK 127.0.0.1:6379> set aa:bb:qq:2 1 OK 127.0.0.1:6379> set aa:bb:qq:3 1 OK
Listázzuk ki azokat a kulcsokat, amelyek aa:bb:qq kezdetűek:
~$ redis-cli --raw keys "aa:bb:qq:*" aa:bb:qq:2 aa:bb:qq:3 aa:bb:qq:1
Tegyük be egy for ciklusba és egyelőre írassuk csak ki:
~$ for i in `redis-cli --raw keys "aa:bb:qq:*"`; do echo $i; done aa:bb:qq:2 aa:bb:qq:3 aa:bb:qq:1
Ha minden megfelelő, az echo helyére mehet a redis-cli del $i, így:
~$ for i in `redis-cli --raw keys "aa:bb:qq:*"`; do redis-cli del $i; done (integer) 1 (integer) 1 (integer) 1
Végül ellenőrizzük az eredményt. Az a jó, ha nem kapunk eredményt, hiszen töröltük:
~$ redis-cli --raw keys "aa:bb:qq:*" ~$
Most pedig ellenőrizzük vissza, hogy a többi kulcs megvan-e. Pl.
~$ ~$ redis-cli get aa:bb:cc:5 "1"