Redis: Kulcsok tömeges törlése redis-cli segítségével

Redis logó
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"