数据库 - 请问redis遇到条件查询怎么办呢?

 圆季 发布于 2022-10-25 09:46

我是新手刚想学redis,但是看了很多资料都在说redis怎么快怎么快,很少说具体怎么应用到项目上的,就算有也是做队列或是缓存用。看了看redis入门资料也说redis只支持k->v类型的数据保存且没有条件查询,那如果遇到条件查询了怎么办呢?如保存了一些对象:a{name:lijiang age:60 } 请问怎么查询所有姓li的用户或所有年龄是60的用户呢?

1 个回答
  • 快是有代价的。redis是一个非关系型数据库。要按条件查询的话必须手动为数据创建索引。

    保存对象可以用hashset。假设hashset的key是'user:姓名'这种形式。
    条件查询可以用sorted set。key是对象的一个field。查找名字的时候,可以用zRangeByLex指令:

    redis> zadd personIndex:name 0 lijiang 0 likui 0 abcde
    (integer) 3
    redis> zRangeByLex personIndex:name [li (lj
    1) "lijiang"
    2) "likui"
    

    之后就可以用user:lijiang,user:likui获取相关信息。

    要找名字以li开始的人,可以用'[li (lj'查找处于[li..., lj)这个半开区间的字符串。redis比较一个字符串和它的前缀时,长的那个比较大(例如:liA > li,liABCDEF…… < lj)。

    (注意:zRangeByLex需要redis版本>2.8.9)

    而条件查找年龄,可以用sorted set的zRangeByScore指令:

    redis> zadd personIndex:age 60 lijiang 30 likui 20 abcde
    (integer) 3
    redis> zRangeByScore personIndex:age 30 60
    1) "likui"
    2) "lijiang"
    

    zRangeByScore的三个参数分别是:key,min, max(闭区间)

    参考:http://redis.io/commands/

    2022-10-26 23:08 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有