Skip to content

Redis - Datenbanken löschen

Redis
  • Bei meiner Umorganisation, jedes Forum eine eigene DB, habe ich jetzt das kleine Problem gehabt, das in jeder DB beide Datenbanken drin sind. Unschön, das muss man ändern 😉

    Dazu erst mal beide Datenbanken kopiert, da wir hier eine Operation durchführen, die die Daten löscht. Also bitte an Datensicherungen denken!

    Wir wir uns zur DB connecten, kennen wir ja mittlerweile, jede DB läuft auf einem eigenen Port. Also müssen wir uns zwei mal connecten.

    redis-cli -h 10.10.0.155 -p 6379
    redis-cli -h 10.10.0.155 -p 6380
    

    Danach muss man sich so authentifizieren

    AUTH <password>
    

    Ein INFO gibt Euch viele Informationen über die DB, hier das Wichtigste

    INFO
    # Server
    redis_version:6.0.16
    ..
    # Clients
    connected_clients:3
    ..
    # Keyspace
    db0:keys=65947,expires=0,avg_ttl=0
    db1:keys=6791,expires=2894,avg_ttl=73471014
    

    Hier kann man jetzt sehen, das in der Redis-DB zwei Datenbanken gespeichert sind. Ich habe mir vorher alles aufgeschrieben, damit ich nicht durcheinander komme.

    Und weiter geht's. wir wählen die entsprechende DB aus.

    select 0
    

    Danach, löschen wir diese DB.

    FLUSHDB
    

    Danach habe ich wieder ein INFO augeführt

    ..
    # Keyspace
    db1:keys=6791,expires=2894,avg_ttl=74684837
    

    Man sieht, es ist nur noch eine DB vorhanden. Parrallel dazu habe ich das auf dem Server im Dateiverzeichnis beobachtet.

    Vor der Operation

    ls -lha
    insgesamt 74M
    drwxr-x---  2 redis redis 4,0K  7. Nov 08:15 .
    drwxr-xr-x 25 root  root  4,0K  5. Nov 15:39 ..
    -rw-rw----  1 redis redis  37M  7. Nov 08:15 dump.rdb
    -rw-r-----  1 root  root   37M  7. Nov 08:10 dump.rdb_BAK
    

    Danach

    ls -lha
    insgesamt 42M
    drwxr-x---  2 redis redis 4,0K  7. Nov 08:16 .
    drwxr-xr-x 25 root  root  4,0K  5. Nov 15:39 ..
    -rw-rw----  1 redis redis 4,8M  7. Nov 08:16 dump.rdb
    -rw-r-----  1 root  root   37M  7. Nov 08:10 dump.rdb_BAK
    

    Hier kann man jetzt sehen, das die DB Größe auf dem Datenträger sich verändert hat. Es ist nur noch das zweite Forum drin, was deutlich kleiner ist.

    Bitte daran denken, alle Änderungen die man macht passieren im Speicher. Die Datenbank wird nur alle paar Minuten auf den Datenträger geschrieben!

    Es kann also etwas dauern, bis man das also sieht. Danach das Ganze dann noch für die andere DB durchgeführt. Jetzt habe ich zwei Instanzen der Redis-Datenbank mit jeweils eigener DB. Ich erhoffe mir dadurch einen besseren Überblick, eine bessere Wartung und eine bessere Datensicherung.

    Als Nebeneffekt benutzt jetzt jede DB eine eigene CPU, wenn ich die Informationen im Netz richtig verstanden habe. Wobei das in meinem Anwendungsfall keine Bedeutung hat, dafür ist da einfach zu wenig los. Wenn man Foren mit tausenden Benutzern hätte, wäre das vermutlich extrem wichtig.

  • Nextcloud - Update auf 28.0.2

    Nextcloud
    2
    0 Stimmen
    2 Beiträge
    118 Aufrufe
    FrankMF

    Für den, der sich alle Änderungen ansehen möchten -> https://github.com/nextcloud/server/releases

  • Redis - Datenbank Zugriff mit Python

    Redis
    3
    0 Stimmen
    3 Beiträge
    95 Aufrufe
    FrankMF

    Ich bin mit der Lernkurve noch nicht so richtig zufrieden. Eine Frage die sich mir stellte, geht das einfacher? Der Ursprung meiner Datenbank Struktur liegt in einem anderen Projekt, wo ich versucht habe Daten permanent in einem File zu speichern. Dazu hatte ich damals JSON genommen. Deswegen auch diese Zeilen

    self.project = str(db_client.json().get('settings', '$..project')[0]) or self.project

    Gut, ich hatte dann mal ChatGPT gefragt, wie macht man das so 'normalerweise'? es kam eine Klasse heraus, die ich dann intensiv ausprobiert habe, ein wenig umgebaut usw. So lange, bis ich der Meinung war, ok ich habe es verstanden. Jetzt nutzte der Code auch mehr Redis Funktionen, wie

    self.client.hset('settings', name, json.dumps(data))

    Es waren jetzt folgende Funktionen drin

    hset hexists hdel hget

    Dokumentation -> https://redis.io/commands/hset/

    Beim Durchlesen des Codes hatte ich jetzt mehr das Gefühl, so muss das sein 🙂

    In RedisInsight sieht das dann jetzt so aus.

    393195f7-1017-4285-8fca-734ee6b4bff7-grafik.png

    Klasse class PortfolioSettings: def __init__(self, host='172.17.0.2', port=6379, db=0): if args.test_mode == 1: self.client = redis.StrictRedis(host=SERVER_IP, port=port, db=TEST[0]) else: self.client = redis.StrictRedis(host=SERVER_IP, port=port, db=LIVE[0]) def set_settings(self, name, data): """Init settings if db don't exist""" if not self.client.hexists('settings', name): self.client.hset('settings', name, json.dumps(data)) return True return False def edit_setting(self, name, data): """Edit an entry in settings""" if self.client.hexists('settings', name): self.client.hset('settings', name, json.dumps(data)) return True return False def delete_setting(self, name): """Delete an entry in settings""" return self.client.hdel('settings', name) def get_setting(self, name): """Get an entry in settings""" setting = self.client.hget('settings', name) return json.loads(setting) if setting else None def get_all_settings(self): """Get all entries in settings""" settings = self.client.hgetall('settings') return {k.decode(): json.loads(v) for k, v in settings.items()}

    Und hier die Initialisierung

    settings_data = PortfolioSettings() ##################### # Will only be executed if DB is not available! ##################### if not settings_data.get_all_settings(): # Settings initialisieren print("INIT") settings_data.set_settings("project", "Portfolio") settings_data.set_settings("version", "0.0.3") settings_data.set_settings("theme", "dark") settings_data.set_settings("url_list", ["https://www.onvista.de/aktien/Deutsche-Telekom-Aktie-DE0005557508"]) settings_data.set_settings("exchange_list", ['DKB','Smartbroker','BUX'])

    Teile der Klasse sind [KI-generiert]

    Ich war zufrieden und habe die Klasse dann in mein Projekt übernommen und den Code überall entsprechend angepasst.

  • Wichtige Links

    Angeheftet Ansible
    1
    0 Stimmen
    1 Beiträge
    64 Aufrufe
    Niemand hat geantwortet
  • Star64 - Model A 8GB

    Hardware
    2
    0 Stimmen
    2 Beiträge
    107 Aufrufe
    FrankMF

    Der Stromanschluss ist derselbe wie beim Quartz64, somit kann ich alle meine Netzteile weiter benutzen.

  • Redis - Fehler bei apt update && apt upgrade

    Redis
    1
    0 Stimmen
    1 Beiträge
    168 Aufrufe
    Niemand hat geantwortet
  • 0 Stimmen
    1 Beiträge
    2k Aufrufe
    Niemand hat geantwortet
  • Wenn dir der Redis-Server flöten geht....

    Verschoben Redis
    3
    0 Stimmen
    3 Beiträge
    520 Aufrufe
    FrankMF

    So, nach einer kleinen Pause und ein wenig nachdenken ist mir doch noch was eingefallen 😉

    Backports! Man so einfach!

    nano /etc/apt/sources.list

    Das folgende eintragen.

    # backports deb http://deb.debian.org/debian stretch-backports main

    Danach ein

    apt update

    Und dann schauen wir uns mal die Version an....

    apt -t stretch-backports search redis-server Sorting... Done Full Text Search... Done golang-github-stvp-tempredis-dev/stretch-backports 0.0~git20160122.0.83f7aae-1~bpo9+1 all Go package to start and stop temporary redis-server processes libtest-redisserver-perl/oldstable,oldstable 0.20-1 all redis-server runner for tests python-hiredis/oldstable,oldstable 0.2.0-1+b2 amd64 redis protocol reader for Python 2.X using hiredis python3-hiredis/oldstable,oldstable 0.2.0-1+b2 amd64 redis protocol reader for Python using hiredis redis/stretch-backports 5:5.0.3-3~bpo9+2 all Persistent key-value database with network interface (metapackage) redis-server/stretch-backports 5:5.0.3-3~bpo9+2 amd64 [residual-config] Persistent key-value database with network interface

    Und die habe ich gestern Abend gebaut.

    127.0.0.1:6379> INFO # Server redis_version:5.0.5

    Ok, das schmerzt jetzt 😛

  • Upgrade auf NodeBB 1.11.0

    NodeBB
    1
    0 Stimmen
    1 Beiträge
    364 Aufrufe
    Niemand hat geantwortet