栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Redis-排序集,按属性值查找项目

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Redis-排序集,按属性值查找项目

我认为这很简单。

解决方案1(劣等,不推荐)

您的方法

ZSCAN MySet 0 MATCH Id:92 count1
无法解决,因为存储的字符串
"{"Id":"92"...
不是
"{"Id:92"...
。该字符串已更改为另一种格式。因此,尝试使用
MATCHId":"64
或类似的东西来匹配redis中的json序列化数据。我不熟悉json.net,因此实际的字符串留给您发现。

顺便问一下,我必须问您是否确实

ZSCAN MySet 0 MATCH Id:92 count 1
返回了游标?我怀疑您使用
ZSCAN
了错误的方式。

解决方案2(更好,强烈建议)

ZSCAN
当您的排序集不大并且您知道如何通过Redis的Lua事务节省网络往返时间时,它会很好。这仍然使“按ID查找”操作O(n)。因此,更好的解决方案是通过以下方式更改数据模型:

更改来自的排序集

#   Score   Value0   1443476076 {"Id":"92","Ref":"7ADT","DTime":1443476076,"ATime":1443901554,"ExTime":0,"SPName":"7ADT33CFSAU6","StPName":"7ADT33CFSAU6"}1   1443482969 {"Id":"11","Ref":"DAJT","DTime":1443482969,"ATime":1443901326,"ExTime":0,"SPName":"DAJTJTT4T02O","StPName":"DAJTJTT4T02O"}

#   Score   Value0   1443476076 Id:921   1443482969 Id:11

将其余的详细数据移动到另一组哈希类型键中:

#   Key   field-value field-value ...0   Id:92 Ref-7ADT DTime-1443476076 ...1   Id:11 Ref-7ADT DTime-1443476076 ...

然后,您通过执行id进行定位

hgetall id:92
。至于按日期范围查询,你需要做的
ZRANGEBYSCORE sortedset mindatemaxdate
,然后
hgetall
由每一个ID只能有一个。您最好使用lua将这些命令包装为一个,这样仍然会非常快!

NoSql数据库中的数据需要采用上述冗余方式进行组织。这可能会使一些常规操作涉及多个命令和往返,但是可以通过redis的lua功能解决。我强烈推荐redis的lua功能,使它将命令包装到一个网络往返中,这些命令都在redis服务器端执行,并且原子且超快!

如果您不知道有什么请回覆



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/399449.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号