开发者社区> 问答> 正文

关于 怎样基于Redis实现模糊查询 问题

问题如题,注意不是指模糊查询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

但如果需要既实现根据年龄排序,还要能够实现关键字查询(模糊匹配用户名),应该怎样实现?

展开
收起
爵霸 2016-03-09 09:13:34 4235 0
1 条回答
写回答
取消 提交回答
  • 有一种变通的方法,一定程度上可以实现简单、小数据量的模糊查询:
    写入用户信息时,将用户名分拆作为Key,来记录用户ID

    SADD user:like:j jack jackson
    SADD user:like:ja jack jackson
    SADD user:like:jac jack jackson
    SADD user:like:jack jack jackson
    SADD user:like:jacks jackson
    SADD user:like:jackso jackson
    SADD user:like:jackson jackson

    后面模糊查询时,输入:j,则可以从SET集合中查出jack、jackson两项,当然,这两项值可以用用户ID来代替,再根据用户ID来查询用户哈希信息。
    此方式仅适用于查询条件单一、且字段长度较短场景,如果:同时模糊匹配帖子标题和帖子文章,就不行了,标题还能试试,内容肯定无法实现的。

    当然Redis先天不适合做这件事,所以有别的方案,还是建议用别的方案来实现。

    2019-07-17 18:55:19
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Redis集群演化的心路历程——从2.x到3.0时代 立即下载
微博的Redis定制之路 立即下载
云数据库Redis版的开源之路 立即下载