Maison > Questions et réponses > le corps du texte
我是新手刚想学redis,但是看了很多资料都在说redis怎么快怎么快,很少说具体怎么应用到项目上的,就算有也是做队列或是缓存用。看了看redis入门资料也说redis只支持k->v类型的数据保存且没有条件查询,那如果遇到条件查询了怎么办呢?如保存了一些对象:a{name:lijiang age:60 } 请问怎么查询所有姓li的用户或所有年龄是60的用户呢?
高洛峰2017-04-21 11:18:04
Dépêchez-vous a un prix. redis est une base de données non relationnelle. Pour effectuer une requête basée sur des conditions, vous devez créer manuellement des index pour les données.
Hashset peut être utilisé pour enregistrer des objets. Supposons que la clé de hachage se présente sous la forme « utilisateur : nom ».
Les requêtes conditionnelles peuvent utiliser un ensemble trié. La clé est un champ de l'objet. Lors de la recherche d'un nom, vous pouvez utiliser la commande zRangeByLex :
redis> zadd personIndex:name 0 lijiang 0 likui 0 abcde
(integer) 3
redis> zRangeByLex personIndex:name [li (lj
1) "lijiang"
2) "likui"
Après cela, vous pouvez utiliser user:lijiang et user:likui pour obtenir des informations pertinentes.
Pour rechercher des personnes dont le nom commence par li, vous pouvez utiliser '[li (lj') pour rechercher des chaînes dans la plage semi-ouverte [li..., lj). Lorsque redis compare une chaîne et son préfixe, la plus longue est la plus grande (par exemple : liA > li, liABCDEF... < lj).
(Remarque : zRangeByLex nécessite la version Redis >2.8.9)
Pour rechercher l'âge de manière conditionnelle, vous pouvez utiliser la commande zRangeByScore de l'ensemble trié :
redis> zadd personIndex:age 60 lijiang 30 likui 20 abcde
(integer) 3
redis> zRangeByScore personIndex:age 30 60
1) "likui"
2) "lijiang"
Les trois paramètres de zRangeByScore sont : key, min, max (intervalle fermé)
Référence : http://redis.io/commands/