REDIS: список с произвольным доступом
Какой лучший способ сохранить большой список (например, 10 тыс. Элементов) в Redis, где я также хочу эффективно получать элементы по ключу.
Кажется, у Redis нет структуры данных, эквивалентной Java OrderedHashMap, которая выполняет это, поэтому, возможно, необходимо поддерживать набор и список и обеспечивать их синхронизацию.
1 ответ
Используйте отсортированный набор;
Добавьте несколько закладок; использовать текущее время для score
сортировать в хронологическом порядке:
> zadd bookmarks 123 "bk1"
> zadd bookmarks 456 "bk2"
> zadd bookmarks 789 "bk3"
> zadd bookmarks 999 "bk4"
Чтобы получить закладку, сначала вам нужен индекс:
> zrank bookmarks "bk3"
> "3"
... затем потяните закладку по индексу:
> zrevrange bookmarks 3 3
> "bk3"
Если вы не хотите использовать временные метки, вы можете сортировать закладки лексикографически, используя "1" для оценки:
> zadd bookmarks 1 "link_xyz"
> zadd bookmarks 1 "link_abc"
> zadd bookmarks 1 "link_foo"
> zrange bookmarks 0 -1
1) "link_abc"
2) "link_foo"
3) "link_xyz"
Поиск по индексу O(log(n))
добавить к этому O(log(n)+1)
тянуть одного члена по индексу; лучше чем O(n)
для списков.
Кроме того, если вы добавляете одну и ту же закладку дважды, redis автоматически заменяет предыдущего участника, поэтому вы избегаете дублирования.
Надеюсь, поможет,