Redis ist eine leistungsstarke NoSQL-Datenbank, die eine Fülle von Funktionen und Datenstrukturen bereitstellt, darunter Strings, Hash-Tabellen, Listen, Mengen, geordnete Mengen usw. Darüber hinaus bietet Redis auch einige erweiterte Funktionen wie Veröffentlichung und Abonnement, Lua-Skripte und Transaktionen. Unter anderem ist die verteilte Suchfunktion von Redis sehr praktisch und kann uns dabei helfen, schnell große Datenmengen abzurufen. In diesem Artikel werden wir untersuchen, wie Redis verteilte Suchfunktionen implementiert, und spezifische Codebeispiele geben.
1. Übersicht über die verteilte Suchfunktion von Redis
Redis bietet zwei verteilte Suchfunktionen: Volltextsuche und Scannen basierend auf bestimmten Attributen. Hier werfen wir zunächst einen Blick auf die Konzepte und Implementierungsmethoden dieser beiden Funktionen.
1. Volltextsuche
Die Volltextsuche bezieht sich auf die Suche nach einer bestimmten Zeichenfolge in Textdaten. In Redis können wir das Redisearch-Plug-in verwenden, um die Volltextsuchfunktion zu implementieren. Redisearch verwendet einen invertierten Index, um die Suche zu implementieren. Das heißt, es unterteilt zunächst jedes Dokument in Begriffe, stellt dann eine Zuordnungsbeziehung zwischen jedem Begriff und der Dokumentnummer her und erstellt schließlich eine invertierte Indextabelle für alle Begriffe. Bei der Suche müssen Sie lediglich den abzufragenden Begriff in der Reverse-Index-Tabelle nachschlagen.
Redisearch unterstützt die Wildcard- und Fuzzy-Suche bei der Suche sowie logische Operationen wie „AND“ und „OR“. Suchergebnisse können nach bestimmten Regeln sortiert werden oder Sie können festlegen, dass nur ein Teil der Ergebnisse zurückgegeben wird.
2. Attributbasiertes Scannen
Attributbasiertes Scannen bezieht sich auf das Herausfiltern von Daten, die die Bedingungen gemäß einem oder mehreren Attributen in einer Datensammlung mit mehreren Attributen erfüllen. In Redis können wir RedisGears und Redisearch verwenden, um diese Funktion zu erreichen.
RedisGears ist ein von Redis verwaltetes Plug-In, das die Funktion zum Konvertieren von Redis-Schlüssel-Wert-Paaren in Streams bereitstellt. Wir können auch RedisGears verwenden, um einige Streams zu erstellen, und dann den Befehl „FT.AGGREGATE“ von Redisearch verwenden, um diese Streams zu aggregieren. Nach der Aggregation können die Daten gefiltert und sortiert werden und auch in andere Datenstrukturen in Redis ausgegeben oder über das Netzwerk gesendet werden.
2. Spezifische Implementierung der verteilten Suchfunktion von Redis
Hier nehmen wir die Volltextsuche als Beispiel, um die verteilte Suchfunktion zu implementieren. Wir werden redisearch-py als Python-Client verwenden und eine Redis-Instanz auf zwei Knoten simulieren. In diesem Beispiel erstellen wir in jeder der beiden Redis-Instanzen einen Index und führen eine Suche durch.
1. Abhängigkeiten installieren:
pip install redisearch
2. Zuerst müssen wir zwei Redis-Instanzen auf zwei verschiedenen Ports starten. Hier verwenden wir das offizielle Image von Redis und erstellen zwei Instanzen, indem wir die Portparameter ändern.
$ docker run -d -p 6380:6379 redis
$ docker run -d -p 6381:6379 redis --port 63793. Index erstellen
Verwenden Sie das RediSearch-Objekt in redisearch-py (redisearch-py Main Schnittstelle) erstellt zwei Volltextindizes. Hier haben wir den Befehl „FT.CREATE“ verwendet.
from redisearch import Client, Query, TextField, NumericField
client1 = Client('index1', port=6380)client2 = Client('index2', port=6381)
client1.create_index((TextField('title' , Weight=5.0), TextField('content')))
client2.create_index((TextField('title', Weight=5.0), TextField('content')))
4. Daten hinzufügen
Fügen Sie einige Daten zu den beiden Indizes hinzu, um nachfolgende Suchvorgänge zu erleichtern. Hier verwenden wir einfach den Befehl „FT.ADD“, um Daten hinzuzufügen.
client1.redis.execute_command('FT.ADD', 'idx1', 'doc1', 1.0, 'FIELDS', 'title', 'this is a title', 'content', 'hier ist etwas Inhalt')
client1.redis.execute_command('FT.ADD', 'idx1', 'doc2', 1.0, 'FIELDS', 'title', 'title is important', 'content', 'content is not that important')client2.redis.execute_command('FT.ADD', 'idx2', 'doc1', 1.0, 'FIELDS', 'title', 'this is a title', 'content', 'hier ist etwas Inhalt')
client2.redis.execute_command('FT.ADD', 'idx2', 'doc2', 1.0, 'FIELDS', 'title', 'title is important', 'content', 'content is not that important')
5. Daten durchsuchen
Verwenden Sie das RediSearch-Objekt, um Suchbefehle auszuführen. Hier suchen wir mit dem Befehl „FT.SEARCH“ und geben die Abfragezeichenfolge und den zu durchsuchenden Index an.
result1 = client1.search('content')
result2 = client2.search('content')Sie können sehen, dass die beiden Ergebnismengen aus zwei verschiedenen Indizes stammen.
6. Ergebnisse anzeigen
Abschließend verwenden wir die pprint-Bibliothek in Python, um die Ergebnisse auszudrucken:
von pprint import pprint
pprint(result1)pprint(result2)
Die laufenden Ergebnisse sind wie folgt:
{'docs': [{'content': 'hier ist etwas Inhalt', 'title': 'das ist ein Titel', 'id': 'doc1'}], 'total_results': 1, 'cursor': 0, 'total_pages': 1}
{'docs': [{'content': 'here is some content', 'title': 'this is a title', 'id': 'doc1'}], 'total_results ': 1, 'cursor': 0, 'total_pages': 1}
Wir können sehen, dass beide Suchergebnisse Dokumente mit „hier ist etwas Inhalt“ enthalten.
3. Zusammenfassung
In diesem Artikel haben wir die verteilte Suchfunktion von Redis vorgestellt und ein Codebeispiel für die Volltextsuche gegeben. Bei der Implementierung der verteilten Suche müssen wir zwei Plug-Ins verwenden, Redisearch und RedisGears, und die Clusterkonfiguration auf Redis durchführen.
Die verteilte Suchfunktion von Redis hilft uns nicht nur, große Datenmengen schnell abzurufen, sondern vermeidet auch einzelne Fehlerquellen und verbessert die Systemverfügbarkeit. Wir glauben, dass Sie durch das Studium dieses Artikels ein tieferes Verständnis der verteilten Suchfunktion von Redis erhalten.
Das obige ist der detaillierte Inhalt vonWie Redis die verteilte Suchfunktion implementiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!