问题如题,注意不是指模糊查询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
但如果需要既实现根据年龄排序,还要能够实现关键字查询(模糊匹配用户名),应该怎样实现?
淡淡烟草味2017-04-24 16:02:35
간단하고 적은 양의 퍼지 쿼리를 어느 정도 달성할 수 있는 대체 방법이 있습니다.
사용자 정보 작성 시 사용자 이름을 Key로 분할하여 사용자 ID를 기록합니다
다음에 퍼지 쿼리를 수행할 때 j
을 입력하면 SET
컬렉션에서 jack
및 jackson
두 항목을 찾을 수 있습니다. 물론 이 두 값은 사용자 ID로 대체될 수 있습니다. 그런 다음 사용자 ID에 따라 사용자 해시 정보를 쿼리합니다.
이 방법은 쿼리 조건이 단일이고 필드 길이가 짧은 시나리오에만 적합합니다. If: 게시물 제목과 게시물 기사의 퍼지 일치가 동시에 작동하지 않습니다. 제목은 계속 시도할 수 있지만 내용은 확실히 달성되지 않을 것입니다.
물론 Redis는 본질적으로 이에 적합하지 않으므로 다른 솔루션이 있는 경우 이를 달성하기 위해 다른 솔루션을 사용하는 것이 좋습니다.
巴扎黑2017-04-24 16:02:35
완곡한 방법은 Lua 스크립트를 직접 작성하는 것입니다.
또는 데이터 세트가 크지 않은 경우 클라이언트 측에서 직접 필터링하세요.
퍼지 쿼리가 어려운 요구사항이라면 Solr 또는 Elasticsearch로 전환하는 것이 좋습니다.
黄舟2017-04-24 16:02:35
Redis에는 이러한 풍부한 쿼리 방법이 없으며 퍼지 쿼리는 키에서만 수행할 수 있으므로 풍부한 요구 사항을 충족할 수 없습니다. 고속 스토리지를 원한다면 Redis를 사용하는 것이 좋습니다. 비즈니스 로직을 수행하고 풍부한 쿼리 방법을 갖고 싶다면 MongoDb를 사용하는 것이 좋습니다