2011-04-25 8 views
5

Supposons que j'ai des nouvelles stockées dans un hachage. J'ai différentes hash (représenter chaque hachage nouvelles):Redis: Comment puis-je trier mon hachage par les clés?

news:1 
news:2 
news:3 
... 

Je veux récupérer toutes les clés avec les touches de commande comme ça:

KEYS news:* 

Le problème des clés ne sont pas classés:

news:3 
news:1 
news:2 

Je voudrais récupérer la liste des clés dans le bon ordre. Je ne suis pas sûr que le hash soit la structure dont j'ai besoin. Mais, selon le redis documentation:

Redis hashs sont des cartes entre champ de chaîne et les valeurs de chaîne, ils sont le type de données idéal pour représenter des objets (pour les utilisateurs d'instance avec un certain nombre de domaines comme le nom, le nom, l'âge, et ainsi de suite):

Le stockage de mon objet de nouvelles dans un hachage semble être une bonne idée.

Des suggestions?

+0

Si vous voulez trier les clés, êtes-vous sûr que c'est un hachage et non une liste que vous voulez? – Theo

+0

@Theo, c'est une partie de ma question. Voir ci-dessous;) –

Répondre

5

Pensez aux hachages Redis en tant que documents indexés.

HSET news:1 title levy_breaks 
HSET news:1 type breaking_news 
HSET news:1 byline alphazero 
HSET news:1 date 04:25:2011 
HSET news:1 content <the story> 

HSET news:2 ... 
.. 

Dans ce qui précède, news:1 est la « clé de hachage », suivi d'un « champ de hachage » et, enfin, sa valeur associée.

Cela dit, il semble que vous voulez simplement trier vos «clés de hachage».

Utilisez une construction MULTI/EXEC pour définir tous les champs d'une nouvelle (avec n champs) et enfin ajoutez la clé de hachage, par ex. votre article de nouvelles - à un ensemble trié. Vous pouvez également les ajouter à une liste et utiliser la commande SORT dans cette liste.

The Redis docs.

+0

Est-il possible de détecter quand une clé est ajoutée à mon dictionnaire, puis d'ajouter cette clé à ma liste triée?Sans cette fonctionnalité, comment puis-je être sûr que ma liste triée contient la clé complète dans mon hash à tout moment? Merci. –

+0

Redis supporte la pub/sous-sémantique. Vous pouvez donc ajouter une clé de news: xxx (à "news: channel", par exemple) dans le bloc multi/exec. Voir http://redis.io/topics/pubsub. Demandez au groupe redis google car il y a peut-être un moyen beaucoup plus efficace d'accomplir cela. – alphazero

+0

Merci @alphazero! –

2

Ce que vous pouvez faire est de stocker un ensemble ou une liste des nouvelles qui existent. Par exemple, lorsque vous créez un article, disons news: 4, vous pouvez ajouter l'index 4 à un ensemble, disons list: news, qui aurait maintenant [1, 2, 3, 4].

Supposons maintenant que votre structure de hachage de nouvelles est date, auteur. Avec cela en place, vous pouvez exécuter les éléments suivants:

liste de tri: nouvelles get * -> some_value_a -> * -> some_value_b

Est-ce que sens? Hope it helps

0

peut-être vous pouvez essayer HSCAN, qui peut obtenir un tableau 2D aime
[[key3, value3], [key1, value1], [key2, value2]]
qui sorte par insertion ordre de clés. Mais ce n'est disponible que depuis Redis 2.8.0

Questions connexes