Heim> Datenbank> Redis> Hauptteil

Detaillierte Beispiele, wie Redis Schnittmenge, Vereinigung und Ergänzung von Daten implementiert

WBOY
Freigeben: 2022-06-02 21:09:18
nach vorne
2707 Leute haben es durchsucht

Dieser Artikel vermittelt Ihnen relevantes Wissen überRedis, das hauptsächlich verwandte Probleme zur Realisierung der Schnittmenge, Vereinigung und Komplementierung von Daten vorstellt. Wenn alle Berechnungen im JVM-Speicher ausgeführt werden, kann es leicht zu Speicherproblemen kommen Ich hoffe, dass die OOM-Ausnahme aufgrund von unzureichendem Speicherplatz für alle hilfreich ist.

Detaillierte Beispiele, wie Redis Schnittmenge, Vereinigung und Ergänzung von Daten implementiert

Empfohlenes Lernen:Redis-Video-Tutorial

Szenenbeschreibung

Heute haben wir mehrere Textdateien lokal und jede Datei speichert viele 32-Bit-Zeichenfolgen als eindeutige Kennung Wenn wir jeden Tag eine sehr große Anzahl von Benutzern haben, müssen wir möglicherweise eine Schnitt-, Vereinigungs- oder Komplementverarbeitung für diese Benutzer durchführen. Die einfachste Methode besteht darin, Operationen durchzuführen Sammlungen in Java, z. B. die Verwendung von HashSet zum Ausführen einiger entsprechender Vorgänge. Bei solchen Vorgängen gibt es jedoch eine Einschränkung, das heißt, dass wir während der Ausführung der JVM im Allgemeinen nur über einen begrenzten Anfangsspeicher verfügen OOM-Ausnahmen können leicht durch unzureichenden Speicherplatz verursacht werden. Deshalb stellen wir heute eine skalierbarere Methode zur Durchführung solcher Schnitt- und Komplementoperationen vor: Implementierung von Daten über Redis. Umgebungsbeschreibung Redis-Version: Redis 6.0.6. Jedis-Version: 4.2.2 und Komplementberechnung


    Initialisierungskonstanten
  •   redis.clients jedis 4.2.2   cn.hutool hutool-all 5.8.0.M3 
    Nach dem Login kopieren
  • Daten in der angegebenen Datei initialisieren

    public class RedisCalculateUtils { static String oneFileString = "/Users/tmp/test-1.txt"; static String twoFileString = "/Users/tmp/test-2.txt"; static String diffFileString = "/Users/tmp/diff-test.txt"; static String interFileString = "/Users/tmp/inter-test.txt"; static String unionFileString = "/Users/tmp/union-test.txt"; static String oneFileCacheKey = "oneFile"; static String twoFileCacheKey = "twoFile"; static String diffFileCacheKey = "diffFile"; static String interFileCacheKey = "interFile"; static String unionFileCacheKey = "unionFile"; }
    Nach dem Login kopieren
  • Geben Sie die Datei an, die in Redis geschrieben werden soll rreee

    Differenzsatzberechnungsergebnisse werden geschrieben Die angegebene Datei
  • /** * 初始化数据并写入文件中 */public static void writeFile() { File oneFile = new File(oneFileString); List fs = new ArrayList<>(10000); for (int i = 10000; i < 15000; i++) { String s = SecureUtil.md5(String.valueOf(i)); fs.add(s); } FileUtil.writeUtf8Lines(fs, oneFile); File twoFile = new File(twoFileString); fs.clear(); for (int i = 12000; i < 20000; i++) { String s = SecureUtil.md5(String.valueOf(i)); fs.add(s); } FileUtil.writeUtf8Lines(fs, twoFile); }
    Nach dem Login kopieren

  • Redis-Befehlsbeschreibung

SDIFFSTORE-Zielschlüssel [Schlüssel …]


Beispiel:
/** * 读取文件数据并写入Redis */public static void writeCache() { try(Jedis jedis = new Jedis("127.0.0.1", 6379)) { Pipeline p = jedis.pipelined(); List oneFileStringList = FileUtil.readLines(oneFileString, "UTF-8"); for (String s : oneFileStringList) { p.sadd(oneFileCacheKey, s); } p.sync(); List twoFileStringList = FileUtil.readLines(twoFileString, "UTF-8"); for (String s : twoFileStringList) { p.sadd(twoFileCacheKey, s); } p.sync(); } catch (Exception e) { throw new RuntimeException(e); }}
Nach dem Login kopieren
SDIFFSTORE-Befehl ähnelt SDIFF. Der Unterschied besteht darin, dass er die Ergebnisse in der Zielsammlung speichert und das Ergebnis zurückgibt auf den Client eingestellt.


Wenn die Zielsammlung bereits vorhanden ist, überschreiben Sie sie.

Rückgabewert

Anzahl der Mitglieder im Ergebnissatz


SINTERSTORE-Zielschlüssel [Schlüssel …]

Beispiel:

/** * oneKey对应的Set 与 twoKey对应的Set 的差集 并写入 threeKey * @param oneKey 差集前面的集合Key * @param twoKey 差集后面的集合Key * @param threeKey 差集结果的集合Key */ public static void diff(String oneKey, String twoKey, String threeKey) { try(Jedis jedis = new Jedis("127.0.0.1", 6379)) { long result = jedis.sdiffstore(threeKey, oneKey, twoKey); System.out.println("oneKey 与 twoKey 的差集的个数:" + result); } catch (Exception e) { throw new RuntimeException(e); } }
Nach dem Login kopieren

Der SINTERSTORE-Befehl ähnelt dem SINTER-Befehl, außer dass er nicht direkt zurückgibt die Ergebnismenge, aber das Ergebnis wird in der Zielsammlung gespeichert.Wenn die Zielsammlung vorhanden ist, wird sie überschrieben.


RückgabewertDie Anzahl der Mitglieder im Ergebnissatz

SUNIONSTORE-Zielschlüssel [Schlüssel …]


Beispiel:
/** * 将计算的差集数据写入到指定文件 */ public static void writeDiffToFile() { File diffFile = new File(diffFileString); try(Jedis jedis = new Jedis("127.0.0.1", 6379)) { Set result = jedis.smembers(diffFileCacheKey); FileUtil.writeUtf8Lines(result, diffFile); } catch (Exception e) { throw new RuntimeException(e); } }
Nach dem Login kopieren
Die Funktion des Befehls SUNIONSTORE ähnelt der von SUNION gibt die Ergebnismenge nicht zurück, sondern wird im Ziel gespeichert.

Wenn das Ziel bereits existiert, wird es überschrieben.

Rückgabewert
Anzahl der Mitglieder im Ergebnissatz

Empfohlenes Lernen:

Redis-Video-Tutorial

Das obige ist der detaillierte Inhalt vonDetaillierte Beispiele, wie Redis Schnittmenge, Vereinigung und Ergänzung von Daten implementiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!