2017-08-16 2 views
0

Ich arbeite mit einem Account-System, mit dem Benutzer ihre Anzeigenamen ändern können. Um dies zu erreichen, hat jeder Benutzer eine UUID. An verschiedenen Punkten in meinem Programm habe ich möglicherweise eine UUID und möchte ihren aktuellen Anzeigenamen, oder ich habe einen aktuellen Anzeigenamen und ich möchte die UUID nachschlagen. Das Nachschlagen beinhaltet entweder einen Datenbankaufruf oder eine HTTP-Anfrage, daher möchte ich Ergebnisse im Speicher zwischenspeichern. Ich bin vertraut mit Guava's LoadingCache, aber es scheint, als müsste ich zwei Caches (Namen -> UUIDs und UUIDs -> Namen) erstellen, um dies zu erreichen. This seems bug-prone, similar to how a BiMap is better than two synchronous maps Gibt es so etwas wie einen bidirektionalen LoadingCache?Etwas ähnliches wie Guava LoadingCache, aber bidirektional?

+0

Können zwei Benutzer den gleichen Anzeigenamen haben? Wenn ja, dann muss Ihr Reverse-Lookup das irgendwie handhaben und es ist nicht eins zu eins. Wahrscheinlich möchten Sie die ID stattdessen mit dem Anzeigenamen ausblenden. –

Antwort

1

Für diesen Fall würde ich nicht unbedingt über ein Paar Caches sorgen, die Bug-anfällig sind: Sie müssen nicht die beiden Richtungen synchron halten, und wenn Sie dies nicht tun, gibt es keine echten Fehler. UUIDs und ihre Beziehungen zu Benutzern werden sich nicht ändern.

Es ist schwierig, einen bidirektionalen Cache richtig synchronisiert zu halten, aber für diesen Fall scheint es Overkill zu sein.

+0

Gut genug, ich denke, mein Hauptanliegen ist eine Situation wie die Abfrage von UUID -> name und bald danach, dass ich nach der UUID dieses Namens gefragt habe. Ich möchte nicht nach Informationen suchen müssen, die ich bereits habe (wenn auch rückwärts, in einem anderen Cache) – ThankThePhoenicians

+1

Dieser Wettlauf ist etwas unvermeidlich, aber Sie können ihn reduzieren, indem Sie z. 'PutIfAbsent' im Reverse-Cache. Du wirst Rennen haben, und sie werden vielleicht zu mehr Fragen führen, als du gerne hättest, aber sie werden gutartige Rassen sein, und alles bessere wäre super kompliziert, wenn es überhaupt möglich wäre. –

Verwandte Themen