开发者社区> 问答> 正文

redis多对多模型设计问题

需求如下:
表 A:
ID webId industryId accountToolId status
任务表 B:
ID updateTime url
中间表:C
ID url accountToolId
表 A 为帐号表 表B 为任务表 为对多对关系
也就是A表中的一个帐号可以执行表B中的多条任务, B表中的一个url可以对应表A中的多个url;
要求 表A 中的同一个accountId只能对应表B中的同一个url链接一次,如果有多次的话,寻找新的帐号来填充这个任务;
之前使用数据库方式查询方式来做这个功能,在制定多条任务,效率过低,等待时间过长,本来优化sql,但流程在那,后来放弃了,制定好的任务是一个List,然后对list中同
一个帐号对应同一个链接任务去重,所以放弃了使用数据库查询方式去重;
目前想采用redis 的key,value 寻找新的帐号填充到任务中去;
1
2
找到所有使用某一条url的帐号; 然后查询出所有的not in (这条url使用过的帐号) 在sql里是这么理解的
然后设置到任务中去,但是在redis中如何 使用类似not in之类的方法呢 还想问下 这种redis设计方式是否可行,能有比较好的设计吗?

展开
收起
落地花开啦 2016-02-20 17:29:47 4720 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    多多的关系其实还是可以找到一一对应的关系,设计方案有多种。主要看你的业务场景,比如你经常要查询一个账号下的多个任务,这个是有你可以使用sotedSet结构,以账号作为key,任务id作为value(或者任务对象序列化对象),如果你要经常查询这个任务被谁执行,那么可以使用前缀+任务id作为key,账号作为value。当然,如果您的这些任务是有状态的,您可以使用hash结构。
    选择数据结构,我们主要看查询的时候,能够通过支持批量操作的命令,节省连接。比如hmget、zrevange之类,这样查询的时候效率高,设置的尽量采用pipeline,省连接。

    2019-07-17 18:45:33
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Redis在唯品会的应用实践——架构演进与功能定制 立即下载
微博的Redis定制之路 立即下载
云数据库Redis版的开源之路 立即下载