問題如題,注意不是指模糊查詢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
後面模糊查詢時,輸入:
j
,则可以从SET
集合中查出jack
、jackson
兩項,當然,這兩項值可以用用戶ID來代替,再根據用戶ID來查詢用戶哈希資訊。此方式僅適用於查詢條件單一、且字段長度較短場景,如果:同時模糊匹配帖子標題和帖子文章,就不行了,標題還能試試,內容肯定無法實現的。
當然Redis先天不適合做這件事,所以有別的方案,還是建議用別的方案來實現。
委婉的方式是自己寫lua腳本。
或是資料集不大的情況下自己在客戶端過濾。
如果模糊查詢是硬需求,建議轉移到solr或elasticsearch來做。
Redis 沒有那麼豐富的查詢方法, 模糊查詢也只能在 key 中進行,並不能滿足你這麼豐富的需求。如果要高速儲存建議使用 Redis, 如果是想進行業務邏輯,要有豐富的查詢方式,建議使用MongoDb