2015-06-01 3 views
1

я должен хранить данные в Redis, где хранить данные в формеКак смоделировать этот хэш со значениями как список в redis?

{ 
    "KEY" : { 
     "k1":["v1", "v2", "v3"], 
     "k2":["v4", "v5"], 
     "k3":["v1", "v2]} 
    }, 
    "KEY1" :{ 
     "k1":["v11", "v2"], 
     "k2":["v4", "v15", "v3"], 
     "k3":["v12", "v2]} 
    } 
} 

Согласно документации, мы не можем иметь список как значение в структуре хэша данных. Каков наилучший способ моделирования этого, список генерируется по одному значению за раз, поэтому мне нужно добавить или добавить. Должна ли существовать разная база данных для каждой из клавиш верхнего уровня ?, или должны быть разные экземпляры redis, которые необходимо довести до того, чтобы клавиши верхнего уровня использовались для идентификации конкретной базы данных или экземпляра, в котором ключ среднего уровня может использоваться в качестве ключа для загрузки значений в списке или наборе?

ответ

1

Redis довольно гибкий относительно того, как вы можете структурировать свои данные, но вот возможный подход.

Поскольку значения хэша должны быть строками, они могут быть ключами, относящимися к спискам. Таким образом, вы можете создать список значений под ключ верхнего уровня:

redis> lpush list_value:k1 v1 
(integer) 1 
redis> lpush list_value:k1 v2 
(integer) 2 
redis> lpush list_value:k1 v3 
(integer) 3 

Затем вы установили ключ со ссылкой на этот список в качестве значения хэш-:

redis> hset KEY k1 list_value:k1 
(integer) 1 

Чтобы принести свой список значения, сначала получить ключ, где эти значения сохраняются:

redis> hget KEY k1 
"list_value:k1" 

Затем вы используете этот ключ, чтобы получить список значений:

redis> lrange list_value:k1 0 -1 
1) "v3" 
2) "v2" 
3) "v1" 

Вы должны использовать пространства имен (обычно на основе разделителей двоеточия), чтобы называть клавиши, указывающие на ваши списки значений, чтобы избежать столкновений с ключами ваших хэшей.

Смежные вопросы