-
Zdecydowanie odradzam używanie do tego Redisa. Będziesz przechowywać mnóstwo dodatkowych danych wskaźnikowych, a jeśli kiedykolwiek zdecydujesz, że chcesz wykonać bardziej skomplikowane zapytania, takie jak
SELECT WHERE first_name LIKE 'jon%'
wpadniesz w kłopoty. Będziesz także musiał zaprojektować dodatkowe, bardzo duże indeksy, które przecinają wiele kolumn, na wypadek gdybyś chciał jednocześnie wyszukiwać dwa pola. Zasadniczo będziesz musiał dalej hakować i przeprojektowywać strukturę wyszukiwania. Lepiej byłoby skorzystać z Elastic Search lub Solr, lub dowolnego innego frameworka już stworzonego do robienia tego, co próbujesz zrobić. Redis jest niesamowity i ma wiele dobrych zastosowań. To nie jest jeden z nich. -
Ostrzeżenie na bok, aby odpowiedzieć na twoje rzeczywiste pytanie:myślę, że najlepiej będzie, jeśli skorzystasz z wariantu twojego pierwszego rozwiązania. Użyj jednego posortowanego zestawu na indeks, ale po prostu zamień litery na liczby. Konwertuj swoje litery na jakąś wartość dziesiętną. Możesz użyć wartości ASCII lub po prostu przypisać każdą literę do wartości 1-26 w porządku leksykograficznym, zakładając, że używasz angielskiego. Standaryzuj, aby każda litera zajmowała tę samą długość (jeśli więc 26 jest twoją największą liczbą, 1 będzie zapisane jako „01”). Następnie po prostu dołącz je razem z przecinkiem dziesiętnym z przodu i użyj go jako swojego wyniku na indeks (tj. „Kapelusz” byłby „0,080120”). Dzięki temu uzyskasz odpowiednio uporządkowane mapowanie 1 do 1 między słowami a tymi liczbami. Podczas wyszukiwania przekonwertuj litery na liczby, a wtedy będziesz mógł używać wszystkich ładnie posortowanych funkcji Redis, takich jak
ZRANGEBYSCORE
bez konieczności ich przepisywania. Funkcje Redisa są napisane bardzo, bardzo optymalnie, więc znacznie lepiej jest używać ich, gdy tylko jest to możliwe, zamiast pisać własne.