问题如题,注意不是指模糊查询Key,是指对值的模糊(关键字)查询。
举个栗子:
$ HMSET user:1 name jack age 18
$ HMSET user:2 name jackson age 21
$ HMSET user:3 name suse age 16
假如有上述用户数据,以哈希形式存储,如果要做排序,可以
# score为#age,value为#userId,以ZSET结构存储
$ ZADD user:rank:age 18 1 21 2 16 3
# 查询有序列表
$ ZRANGE user:rank:age 0 -1
但如果需要既实现根据年龄排序,还要能够实现关键字查询(模糊匹配用户名),应该怎样实现?
Il existe une méthode alternative, qui peut réaliser dans une certaine mesure une quantité simple et réduite de requêtes floues :
Lors de l'exécution d'une requête floue aprèsLors de l'écriture des informations utilisateur, divisez le nom d'utilisateur en tant que clé pour enregistrer l'ID utilisateur
, saisissez :
j
, vous pourrez alors trouver deux élémentsSET
etjack
de la collectionjackson
. Bien entendu, ces deux valeurs peuvent être remplacées par l'ID utilisateur, puis, en fonction de l'ID utilisateur, pour interroger les informations de hachage de l'utilisateur.Cette méthode ne convient qu'aux scénarios dans lesquels la condition de requête est unique et la longueur du champ est courte. Si : La correspondance floue du titre de la publication et de l'article ne fonctionnera pas en même temps. Vous pouvez toujours essayer le titre, mais le. le contenu ne sera certainement pas atteint.
Bien sûr, Redis n'est pas intrinsèquement adapté à cela, donc s'il existe d'autres solutions, il est recommandé d'utiliser d'autres solutions pour y parvenir.
La méthode euphémique est d'écrire vous-même le script Lua.
Ou si l'ensemble de données n'est pas volumineux, filtrez-le vous-même côté client.
Si une requête floue est une exigence stricte, il est recommandé de passer à Solr ou Elasticsearch.
Redis ne dispose pas de méthodes de requête aussi riches, et les requêtes floues ne peuvent être effectuées qu'en clé, ce qui ne peut pas répondre à vos besoins riches. Si vous souhaitez un stockage à haut débit, il est recommandé d'utiliser Redis. Si vous souhaitez exécuter une logique métier et disposer de méthodes de requête riches, il est recommandé d'utiliser MongoDb
.