数据库设计 – Redis多列范围查询
发布时间:2020-12-12 06:55:13 所属栏目:MsSql教程 来源:网络整理
导读:我有Redis Hashes的用户,并希望根据工资和年龄找到类似的用户(给定一个特定的用户). user id101/id nameNeo/name age30/age salary300/salary ..../user 所以,在这种情况下,我需要在一定的限度内找到接近我的年龄和工资的用户接近我的工资. 在SQL中,我会假设
我有Redis Hashes的用户,并希望根据工资和年龄找到类似的用户(给定一个特定的用户).
<user> <id>101</id> <name>Neo</name> <age>30</age> <salary>300</salary> .... </user> 所以,在这种情况下,我需要在一定的限度内找到接近我的年龄和工资的用户接近我的工资. SELECT id,abs(age - 30) as agediff,abs(salary - 300) as saldiff FROM USERS WHERE (age BETWEEN 25 35) AND (salary BETWEEN 250 350) ORDER BY agediff ASC,saldiff ASC 我们可以这样做,比如说使用ZINTERSTORE,结果集合是按照SQL中的用户相似性排序的吗? 解决方法这不像SQL查询那么容易.你需要设置一些键等.不过,这就是我认为的方法. ZADD index:user:age 30 101 # 101 is id of user whose name is Neo ZADD index:user:salary 300 101 为两个条件创建中间集 # Condition 1: age 25-30 ZUNIONSTORE temp:age 1 index:user:age WEIGHTS 1 ZREMRANGEBYSCORE temp:age 0 24 ZREMRANGEBYSCORE temp:age 36 INF # Condition 2: Repeat above for salary # Now create result set which is intersection of both above sets ZINTERSTORE temp:result 2 temp:salary temp:age # 2 is no. of sets to intersect # Verify result ZRANGE temp:result 0 -1 最后 >删除临时密钥>使用MULTI / EXEC运行所有这些命令,以便只有一次往返 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |