问题如题,注意不是指模糊查询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
但如果需要既实现根据年龄排序,还要能够实现关键字查询(模糊匹配用户名),应该怎样实现?
シンプルでデータ量の少ないファジークエリをある程度実現できる代替方法があります:
リーリーユーザー情報を書き込む際に、ユーザー名をKeyに分割してユーザーIDを記録します
後であいまいクエリを実行する場合は、次の 2 つの項目を入力します。 もちろん、これら 2 つの値はユーザー ID に置き換えることができ、ユーザー ID に基づいてユーザーのハッシュ情報がクエリされます。
もちろん、Redis は本質的にこれに適しているわけではないため、他のソリューションがある場合は、他のソリューションを使用してそれを実現することをお勧めします。j
,则可以从SET
集合中查出jack
、jackson
この方法は、クエリ条件が 1 つで、フィールドの長さが短い場合にのみ適しています。投稿タイトルと投稿記事を同時にファジー一致させる場合は、タイトルを試すことはできますが、内容は確実に達成できません。婉曲的な方法は、Lua スクリプトを自分で書くことです。
または、データセットが大きくない場合は、クライアント側で自分でフィルタリングします。
ファジークエリが難しい要件である場合は、Solr または Elasticsearch に移行して実行することをお勧めします。
Redis にはそのような豊富なクエリ メソッドがなく、ファジー クエリはキーでのみ実行できるため、リッチなニーズを満たすことができません。高速なストレージが必要な場合は、Redis を使用することをお勧めします。ビジネスロジックを実行し、豊富なクエリメソッドを使用したい場合は、MongoDb を使用することをお勧めします。