redis 条件查询

 假设有一user表存放在redis中,现要对这张user表进行条件查询,该怎么做?

由于redis这类非关系型数据库是无法进行 select * from x where .....等操作的。

那么该怎么实现这种查询需求呢?

方法1:在redis中取出所有user进行遍历,将符合条件的进行筛选,最后得到结果。

但感觉这种处理方法过于烦琐,数据量过大时性能可能会有影响,所以这并不是最优的方法。

方法2:在将user表中的数据存储到redis时,进行业务数据划分。

假如要将性别进行划分,方便查询不同性别用户。例如用户为男的key为:USER_GENDER_M,女key的为:USER_GENDER_F。在将user数据存储到redis时,同时增加以下一步操作将男与女的userId分别add到不同的key中。

若user是男的则

Jedis.sadd(USER_GENDER_M,userId)

是女的则进行:

Jedis.sadd(USER_GENDER_F,userId)

通过以下查询就可以得到所有男性用户的userId:

Jedis.smembers(USER_GENDER_M)

最后通过以下查询就可以得到所有男性用户数据:

Jedis.hmget(USER,user1Id,user2Id...)

若是有其它条件,也如此设计查询业务,例如某年龄阶段的,某区域的等等的用户。

当查询的条件为:男性用户且年龄为20-30时,则先通过得到男性用户的id,然后得到年龄到20-30之间的用户id,最后通过取两者的交集(Jedis.sinter)就可得到符合这一条件的用户id,进而得到所要数据。

若是or条件则取并集就行。

 

到这,你会发现这些方法都是比较麻烦或无法达到要求的,所以进行强关系条件查询的还是使用关系型数据库进行操作吧

转载于:https://my.oschina.net/WWWW23223/blog/880920

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值