У меня есть большой список строк (содержит имена пользователей, около 350 тыс. Записей). Мне нужно сохранить его отсортированным по лексикографическому порядку, и он должен иметь возможность эффективно извлекать существование членов * и членство **. Сортированные наборы Redis выглядят как тип данных для задания.Случайное лексикографическое упорядочение в отсортированном наборе redis
Однако я, кажется, падаю на первое препятствие. В частности, одним из моих ключевых требований является совместное сохранение разных букв, если они начинаются с одной и той же буквы. Например. как Bender
, так и bender
должны быть заказаны бок о бок. Однако сортированные наборы redis строги в соответствии с правилами лексикографического упорядочения, поэтому все строки, начинающиеся с верхнего регистра, сортируются по умолчанию до того, как все строки начинаются с нижнего регистра (например, Z
заказано до a
, но после A
).
Есть ли способ, которым я могу обойти это и по-прежнему использовать отсортированные наборы redis для выполнения моих требований? FYI, я использую redis версии 2.8.4. Заранее спасибо.
* Член существование: с учетом именем пользователя, проверить, существует ли уже он в сохраненном наборе
** подобии члена: дало имя пользователя, подтяните г N сохраненных имена пользователей, которые больше всего нравится данный пользователь
См. [Нормализация строк для случая и акцентов] (https://redis.io/topics/indexes#normalizing-strings-for-case-and-accents) – thepirat000
@ thepirat000: это отличный пост. Только проблема заключается в использовании ZRANGEBYLEX, который недоступен для redis 2.8.4. Я могу реализовать более раннюю версию: http://oldblog.antirez.com/post/autocomplete-with-redis.html, за исключением того, что это не лексикографически агностик. –