[PYTHON] Vider le contenu de la base de données redis avec lua

C'est une continuation de this J'ai jeté lua sur le serveur redis et l'ai SCANÉ dans le serveur pour renvoyer la clé et la valeur, alors je l'ai noté.

environnement

$ python -V
Python 3.7.2

$ redis-cli info | grep redis_version
redis_version:5.0.5

code

Lorsque vous utilisez un hachage ou un ensemble, lisez «HSCAN» ou «ZSCAN» selon le cas.

dump.lua


local cr    = KEYS[1]
local num   = KEYS[2]
local match = KEYS[3]

local cr2, keys = unpack(redis.call("SCAN", cr, "MATCH", match, "COUNT", num))

local values = redis.pcall("MGET", unpack(keys))
return {cr2, keys, values}

export.py


#!/usr/bin/env python
import os
import redis
import click

DEFAULT_REDIS_URL = "redis://localhost:6379/3"
DEFAULT_LUA_FILE  = "dump.lua"

def scan_iter(r, lua_script, bulk=2000, match="*"):
    f = r.register_script(lua_script)

    cr = "0"
    while True:
        cr, keys, values = f(keys=[cr, bulk, match])
        if cr == b"0":
            break

        yield from zip(keys, values)


@click.command()
@click.option("--redis-url", envvar="REDIS_URL", default=DEFAULT_REDIS_URL)
@click.option("--lua-file", envvar="LUA_FILE", default=DEFAULT_LUA_FILE, type=click.File("r"))
@click.option("--output", default=os.sys.stdout, type=click.File("w"))
def cmd(redis_url, lua_file, output):
    r = redis.StrictRedis.from_url(redis_url)
    r.ping()

    for k, v in scan_iter(r, lua_file.read()):
        output.write(k.decode("utf-8"))
        output.write("\n")
        output.write("%d" % len(v))
        output.write("\n")


if __name__ == "__main__":
    cmd()

Courir

$ pip install redis click

Exemple d'entrée de données

$ jq -n -r 'range(10000)|"set key\(.) value\(.)"' | redis-cli -n 8

Essayez de vider

$ ./export.py --redis-url redis://localhost:6379/8

fin.

Recommended Posts

Vider le contenu de la base de données redis avec lua
Essayez d'obtenir le contenu de Word avec Golang
Simulation du contenu du portefeuille
Comprendre le contenu du pipeline sklearn
Voir le contenu de Kumantic Segumantion
Traitez le contenu du fichier dans l'ordre avec un script shell
[python, ruby] sélénium-Obtenez le contenu d'une page Web avec le pilote Web
L'histoire de la création d'un pilote standard pour db avec python.
J'ai vérifié le contenu du volume du docker
Vous pouvez également vérifier la communication de la base de données et du cache avec curl
Alignez la taille de la barre de couleurs avec matplotlib
[Introduction à Python] Comment trier efficacement le contenu d'une liste avec le tri par liste
Paramètre pour entrer le contenu de la bibliothèque avec pytest et effectuer un test de débogage
La troisième nuit de la boucle avec pour
Lire tout le contenu de proc / [pid]
La deuxième nuit de la boucle avec pour
Compter le nombre de caractères avec écho
Récupérer le contenu de git diff depuis python
Remarque: préparez l'environnement de CmdStanPy avec docker
Mathématiques Todai 2016 résolues avec Python
Le contenu du didacticiel Python (chapitre 2) est résumé dans une puce.
[Note] Exportez le html du site avec python.
Augmentez la taille de la police du graphique avec matplotlib
Le contenu du didacticiel Python (chapitre 8) est résumé dans une puce.
Calculez le nombre total de combinaisons avec python
Le contenu du didacticiel Python (chapitre 1) est résumé dans une puce.
Vérifiez la date du devoir de drapeau avec Python
Le contenu du didacticiel Python (chapitre 10) est résumé dans une puce.
Éliminez les inconvénients du widget QDock avec PySide
Défiez la tour de Hanoi avec recurs + stack
Renommer la balise avec un espace de noms en lxml
Remplissez la largeur du bloc-notes Jupyter pour remplir le navigateur
Automatiser des tâches simples avec Python Table des matières
À propos du contenu de développement de l'apprentissage automatique (exemple)
Découvrez le jour par date / heure
La base de la théorie des graphes avec l'animation matplotlib
Le contenu du didacticiel Python (chapitre 6) est résumé dans une puce.
Visualisez le comportement de l'algorithme de tri avec matplotlib
Convertir le code de caractère du fichier avec Python3
Le contenu du didacticiel Python (chapitre 3) est résumé dans une puce.
[Python] Déterminez le type d'iris avec SVM
Créer une table avec le notebook IPython
Contenu de __name__
Extraire le tableau des fichiers image avec OneDrive et Python
Ajouter des attributs d'objets de classe avec une instruction for
Coordonnées les plus à droite de l'étiquette faite avec tkinter
L'histoire de l'arrêt du service de production avec la commande hostname
Apprenez Nim avec Python (dès le début de l'année).
Calculer la somme des valeurs uniques par tabulation croisée des pandas
Ajoutez des informations au bas de la figure avec Matplotlib
Calculez la valeur totale de plusieurs colonnes avec awk
L'histoire du partage de l'environnement pyenv avec plusieurs utilisateurs
Détruire l'expression intermédiaire de la méthode sweep avec Python
Prenez des captures d'écran LCD avec Python-LEGO Mindstorms
Visualisez la gamme d'insertions internes et externes avec python
Calculer le coefficient de régression d'une analyse de régression simple avec python
Prédire le nombre de personnes infectées par COVID-19 avec Prophet
Changer les valeurs du thermo-hygromètre Bot avec Raspberry Pi