假设有一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条件则取并集就行。
到这,你会发现这些方法都是比较麻烦或无法达到要求的,所以进行强关系条件查询的还是使用关系型数据库进行操作吧