Maison >base de données >Redis >Introduction aux commandes Redis pour la suppression par lots

Introduction aux commandes Redis pour la suppression par lots

尚
avant
2020-05-06 09:12:444397parcourir

Introduction aux commandes Redis pour la suppression par lots

Redis implémente la suppression par lots :

1 Accédez au répertoire racine de Redis cd /usr/local/redis-2.8.19

2. dans redis : redis-cli -h 127.0.0.1 -p 6379 (où 127.0.0.1 peut être écrit comme adresse IP du serveur et 6379 est le numéro de port)

3. : clés *

4. Supprimez la valeur de l'index spécifié : del key

5 Effacez les données de l'ensemble du serveur Redis : flushall

6. dans la bibliothèque actuelle : flushdb

[Première méthode] :

Ce qui suit est une suppression par lots de toutes les données Redis commençant par "key_", dont le numéro est 100

redis-cli -h (IP地址) -p 6379 (端口号:6379) KEYS key_* | xargs redis-cli (-h (IP地址) -p 6379 (端口号:6379)) del 
 
=>[执行后返回的结果影响数量]:(integer) 100[数量100个]

[Utilisation spécifique de la fonction DEL dans la commande ci-dessus] :

Touche DEL [clé ...]

Supprimer une ou plusieurs clés données.

Les clés qui n'existent pas seront ignorées.

Complexité temporelle :

O(N), N est le nombre de clés supprimées.

Supprimez une seule clé de type chaîne, la complexité temporelle est O(1).

Supprimez une seule clé de type liste, ensemble, ensemble ordonné ou table de hachage, la complexité temporelle est O(M), M est le nombre d'éléments dans la structure de données ci-dessus.

Valeur de retour :

Le nombre de clés supprimées.

[Exemple] :

#  删除单个 key
redis> SET name huangz
OK
 
redis> DEL name
(integer) 1
 
# 删除一个不存在的 key
redis> EXISTS phone
(integer) 0
 
redis> DEL phone # 失败,没有 key 被删除
(integer) 0
 
# 同时删除多个 key
redis> SET name "redis"
OK
 
redis> SET type "key-value store"
OK
 
redis> SET website "redis.com"
OK
 
redis> DEL name type website
(integer) 3

[Deuxième méthode] :

Inconvénients de la première méthode : Un tel inconvénient nécessite d'établir une connexion à chaque fois, ce qui est faible. si la quantité est grande, mais l'efficacité n'est pas bonne si la quantité est grande.

Avec l'interpréteur Lua intégré, vous pouvez utiliser la commande EVAL pour traiter les scripts Lua :

redis-cli -h(IP地址) -p 6379(端口号:6379) --EVAL "return redis.call('del', unpack(redis.call('keys', ARGV[1])))" 0 'Volume:*'

[Remarque] : Cependant, cette méthode de traitement entraînera des problèmes de décompression de la fonction lua lorsque le volume est grand. , une erreur sera signalée

'''
(error) ERR Error running script (call to f_e177a091510d969af3b388ee986dbe6658df6b57): @user_script:1: user_script:1: too many results to unpack
'''

[Après l'optimisation de la deuxième méthode] :

[Remarque] : Définissez d'abord un tableau de clés, qui stocke toutes les clés de correspondance de modèle. se terminant par la touche 'Volume:', puis une boucle for, traitant 5000 clés à chaque fois, soit del 5000 clés à chaque fois

redis-cli -h(IP地址) -p 6379(端口号:6379) --EVAL "local keys = redis.call('keys', ARGV[1]) 
	for i=1,#keys,5000 
		do 
			redis.call('del', unpack(keys, i, math.min(i+4999, #keys))) 
		end 
		return #keys" 0 'Volume:*'

[Inconvénients de la deuxième méthode] :

Les opérations KEYS sont interdites en ligne !

Redis est monothread. Si le volume est important, les clés seront traversées, ce qui provoquera un blocage et les autres clients ne pourront pas se connecter !

[Troisième méthode] :

La commande scan est prise en charge depuis redis2.8. La correspondance de modèles peut prendre la forme suivante pour supprimer par lots un grand nombre de clés

redis-cli -a youpassowrd -n 0 -p 6379 --scan --pattern "Volume:*" | xargs -L 5000 redis-cli -a youpassword -n 0 -p 6379 DEL

. [Résultat] :

'''
 /work/app/redis/bin/redis-cli -a youpassword -n 0 -p 6379 --scan --pattern "Volume:*" | xargs -L 5000 /work/app/redis/bin/redis-cli -a youpassword -n 0 -p 6379 DEL
(integer) 5000
(integer) 5000
(integer) 5000
(integer) 5000
(integer) 5000
(integer) 5000
(integer) 5000
(integer) 207
'''

Pour plus de connaissances sur Redis, veuillez faire attention à la colonne Tutoriel d'introduction à Redis.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer