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 автоматически заменяет предыдущего участника, поэтому вы избегаете дублирования.

Надеюсь, поможет,

Другие вопросы по тегам