-
Силно не насърчавам използването на Redis за това. Ще съхранявате много допълнителни данни за указатели и ако някога решите, че искате да правите по-сложни заявки, като
SELECT WHERE first_name LIKE 'jon%'
ще се сблъскаш с неприятности. Освен това ще трябва да създадете допълнителни, много големи индекси, които пресичат множество колони, в случай че искате да търсите по две полета едновременно. По същество ще трябва да продължите да хакнете и да реинженерирате рамка за търсене. Ще бъде много по-добре да използвате Elastic Search или Solr, или някоя от другите рамки, които вече са създадени, за да направите това, което се опитвате да направите. Redis е страхотен и има много добри приложения. Това не е един от тях. -
Предупреждение настрана, за да отговоря на действителния ви въпрос:Мисля, че ще бъде най-добре да използвате вариант на първото си решение. Използвайте един сортиран набор за индекс, но просто преобразувайте буквите си в цифри. Преобразувайте буквите си в някаква десетична стойност. Можете да използвате ASCII стойността или просто да присвоите на всяка буква стойност 1-26 в лексикографски ред, ако приемем, че използвате английски. Стандартизирайте, така че всяка буква да заема една и съща числова дължина (така, ако 26 е най-голямото ви число, 1 ще бъде написано "01"). След това просто ги добавете заедно с десетична запетая отпред и го използвайте като резултат за индекс (т.е. „шапка“ ще бъде „.080120“). Това ще ви позволи да имате правилно подредено съпоставяне 1 към 1 между думите и тези числа. Когато търсите, преобразувайте от букви в цифри и след това ще можете да използвате всички функции на Redis с приятен сортиран набор като
ZRANGEBYSCORE
без да е необходимо да ги пренаписвате. Функциите на Redis са написани много, много оптимално, така че е много по-добре да ги използвате, когато е възможно, вместо да пишете свои собствени.