2017-12-29 2 views
1

Ich habe ein Szenario, und ich würde gerne wissen, ob ich Azure Redis Cache richtig verwende, weil ich definitiv keine Leistung so jemals sehe.Azure Redis Cache - Verbesserung der Anwendungsleistung

Die Web-App ermöglicht dem Kunden, Datensätze zu erstellen, zu lesen und zu aktualisieren, und davon auszugehen, dass es sich um Kundendatensätze handelt. Es gibt eine SQL-Datenbank hinter Azure und fast 60.000 Kundendatensätze. Für unser Beispiel nehmen wir an, dass es eine Tabelle mit Kundendetails, Name, E-Mail, Adresse und so weiter gibt.

Wie werden Sie diese Webanwendung erstellen, um die Leistung zu verbessern, weil es viel schneller ist, die Datenbank direkt abzufragen, als alle Datensätze in den Cache zu stellen. Was ich tat, zur Zeit-Cache:

  • Für jeden Lese- einschließlich Filter (Suchen, Sortieren usw.) ich die Daten aus dem Redis Cache erhalten, deserialisieren es als List<T> und Abfrage, fiter, Suche, etc. und kehrt die Ergebnisse.
  • Für Update, ich aktualisiere den Datensatz in der SQL-DB, hole alle Datensätze von db als List<T> und speichern Sie es im Cache.
  • Zum Erstellen und Löschen derselben wie für das Update oben.

ich Null Performance-Vorteile für den Cache verwendet wird. Benutze ich es falsch?

Ich denke, das ist eine schlechte Idee der Serialisierung von vielen Daten und speichern Sie es im Cache. Irgendwelche Ideen, wie man es besser macht?

Antwort

1

Obwohl ich keine Suchanfragen über Schlüssel in Redis verglichen habe, können Sie O (N) Suchzeit erwarten, weil Redis jeden Schlüssel überprüfen muss, um zu sehen, ob es die Abfrage erfüllt. Eine Datenbank mit einem Index, der Ihre Abfrage abdeckt, kann in viel weniger als O (N) Zeit suchen, da sie nicht jeden Datensatz durchsuchen muss. Ich würde denken, dass für große Datensätze, eine Datenbank könnte besser für sucht durchführen, weil es nicht auf jeden Datensatz schauen muss.

Jetzt für den besten Weg, Leistung mit Redis zu steigern.

Redis leuchtet, wenn Sie den Schlüssel für den Wert haben, den Sie abrufen möchten. Es ist verrückt-schnell in dieser Situation und wird eine SQL-DB in der Leistung für eine Einzelwertsuche vernichten. Sie werden den größten Nutzen sehen, wenn Sie mit readlastigen Daten arbeiten. Wenn Ihre Anwendung beispielsweise einen Benutzerpräferenzdatensatz pro Benutzer aufweist, der bei jeder Anforderung geprüft werden muss, wäre dies ein guter Kandidat für das Zwischenspeichern in Redis. Sie profitieren außerdem davon, dass Datenverkehr aus Ihrer Datenbank ausgelagert und stattdessen an Redis gesendet wird.

Schauen Sie sich die Cache Aside Pattern für eine ausführlichere Erklärung.

Ein weiteres Problem für die Arbeit mit Redis: Stellen Sie sicher, dass Sie Ihren ConnectionMultiplexor wiederverwenden und nicht ständig versuchen, die Request-Anfrage erneut mit der Redis-Cache-Instanz zu verbinden. Dies ist langsam und es gibt tatsächlich eine maximale Verbindungsbeschränkung pro Cache.

+0

Danke für die Klarstellung. Ich denke, mein Problem ist, dass ich nicht jeden Datensatz einzeln hinzufügen und es durch ID, sondern eine "Liste ", die 60000 Elemente enthält. Die I serialisiert diese Liste als JSON und speichert dieses ganze JSON im Cache unter einem Schlüssel wie 'AllRecords' und der Wert für diesen Schlüssel ist der JSON mit 60000 Datensätzen. Ich denke, das ist ein schlechter Ansatz. Natürlich könnte ich die ganzen Datensätze einzeln speichern und der Schlüssel in Redis Cache könnte der selbe wie der Schlüssel in der SQL db sein, aber es gibt keine Funktionalität in Redis Cache wie'Abfragen alle Elemente' ... – user2818430

+0

Es sei denn, ich speichere alle Schlüssel unter einem Schlüssel in Azure und dann basierend auf diesen Schlüsseln konnte ich alle Datensätze aus dem Cache abrufen, aber ich denke immer noch, dass dies ein schlechter Ansatz ist – user2818430

Verwandte Themen