问题如题,注意不是指模糊查询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에 따라 사용자 해시 정보를 쿼리합니다.이 방법은 쿼리 조건이 단일이고 필드 길이가 짧은 시나리오에만 적합합니다. If: 게시물 제목과 게시물 기사의 퍼지 일치가 동시에 작동하지 않습니다. 제목은 계속 시도할 수 있지만 내용은 확실히 달성되지 않을 것입니다.
물론 Redis는 본질적으로 이에 적합하지 않으므로 다른 솔루션이 있는 경우 이를 달성하기 위해 다른 솔루션을 사용하는 것이 좋습니다.
완곡한 방법은 Lua 스크립트를 직접 작성하는 것입니다.
또는 데이터 세트가 크지 않은 경우 클라이언트 측에서 직접 필터링하세요.
퍼지 쿼리가 어려운 요구사항이라면 Solr 또는 Elasticsearch로 전환하는 것이 좋습니다.
Redis에는 이러한 풍부한 쿼리 방법이 없으며 퍼지 쿼리는 키에서만 수행할 수 있으므로 풍부한 요구 사항을 충족할 수 없습니다. 고속 스토리지를 원한다면 Redis를 사용하는 것이 좋습니다. 비즈니스 로직을 수행하고 풍부한 쿼리 방법을 갖고 싶다면 MongoDb를 사용하는 것이 좋습니다