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.

  • 0 Stimmen
    1 Beiträge
    42 Aufrufe
    Niemand hat geantwortet
  • Redis ändert das Lizenz Modell

    Redis
    2
    0 Stimmen
    2 Beiträge
    58 Aufrufe
    FrankMF

    Ein Artikel von Heise zum Thema

    Link Preview Image Datenbankanbieter Redis ändert sein Lizenzmodell – erneut

    Die No-SQL-Datenbank wird künftig nach einem dualen Modell lizenziert: Redis Source Available License Version 2 oder Server-Side Public License Version 1.​

    favicon

    Developer (www.heise.de)

  • Raspberry Pi5 - First Boot

    RaspberryPi
    1
    0 Stimmen
    1 Beiträge
    121 Aufrufe
    Niemand hat geantwortet
  • Redis - Datenbank Zugriff mit Python

    Redis
    3
    0 Stimmen
    3 Beiträge
    93 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.

  • 0 Stimmen
    1 Beiträge
    117 Aufrufe
    Niemand hat geantwortet
  • 0 Stimmen
    4 Beiträge
    661 Aufrufe
    FrankMF

    Ich parke das mal hier, damit ich das nicht noch mal vergesse. Hat mich eben mal wieder eine Stunde gekostet 😞

    /etc/ansible/ansible.cfg

    [defaults] host_key_checking = False

    Edit -> https://linux-nerds.org/topic/1493/ansible-host_key_checking

  • 0 Stimmen
    3 Beiträge
    319 Aufrufe
    FrankMF

    @thrakath1980 Das kann ich Dir leider nicht beantworten. Denke aber, das es sinnvoll ist neu anzufangen. Welche Settings meinst Du?

    Ich würde mal /etc/config sichern. Da sollte das Meiste ja drin sein.

    Notifications? Hmm, ich hoffe das das funktioniert. Ich schau zur Sicherheit mal nach.

  • Redis Datenbank sichern

    Verschoben Redis
    1
    0 Stimmen
    1 Beiträge
    747 Aufrufe
    Niemand hat geantwortet