我是新手刚想学redis,但是看了很多资料都在说redis怎么快怎么快,很少说具体怎么应用到项目上的,就算有也是做队列或是缓存用。看了看redis入门资料也说redis只支持k->v类型的数据保存且没有条件查询,那如果遇到条件查询了怎么办呢?
如保存了一些对象:a{name:lijiang age:60 }
请问怎么查询所有姓li的用户或所有年龄是60的用户呢?
快是有代价的。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)。
而条件查找年龄,可以用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(闭区间)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。