Maison > base de données > Redis > le corps du texte

Introduction aux commandes Redis pour la suppression par lots

Libérer: 2020-05-06 09:12:44
avant
4297 Les gens l'ont consulté

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个]
Copier après la connexion

[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
Copier après la connexion

[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:*'
Copier après la connexion

[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
'''
Copier après la connexion

[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:*'
Copier après la connexion

[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
Copier après la connexion

. [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
'''
Copier après la connexion

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!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!