redis中多对多模型设计问题

来源:互联网  时间:2016/6/25 17:18:49

关于网友提出的“ redis中多对多模型设计问题”问题疑问,本网通过在网上对“ redis中多对多模型设计问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: redis中多对多模型设计问题
描述:

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 寻找新的帐号填充到任务中去;

       //  10677 为accountToolId   status industry webId   这些都为帐号表的字段
        jedis.set("10677:status", "0");
        jedis.set("10677:industry", "1");
        jedis.set("10677:webId", "1");  
        
        

        jedis.set("10678:status", "1");         jedis.set("10678:industry", "51");         jedis.set("10678:webId", "2");                    jedis.set("10679:status", "1");         jedis.set("10679:industry", "53");         jedis.set("10679:webId", "2");         jedis.set("10680:status", "1");         jedis.set("10680:industry", "53");         jedis.set("10680:webId", "2");                           //任务链接表  weiboUrl accountToolId  updateTime
        jedis.sadd("weiboUrl:http://weibo.com/1641561812/BECe0nTOA","10677");         jedis.sadd("weiboUrl:http://weibo.com/1708922835/BECe0nTtK","10677");         jedis.sadd("weiboUrl:http://weibo.com/1641533697/BECdvklQr","10677");         
        jedis.sadd("weiboUrl:http://weibo.com/1641561812/BECe0nTOA","10678");         jedis.sadd("weiboUrl:http://weibo.com/1708922835/BECe0nTtK","10678");<>         jedis.sadd("weiboUrl:http://weibo.com/1641533697/BECdvklQr","10678");         <>         jedis.sadd("weiboUrl:http://weibo.com/1641561812/BECe0nTOA","10679");         jedis.sadd("weiboUrl:http://weibo.com/1708922835/BECe0nTtK","10679");         jedis.sadd("weiboUrl:http://weibo.com/1641533697/BECdvklQr","10679");                  jedis.sadd("weiboUrl:http://weibo.com/1641561812/BECe0nTOA","10680");
        jedis.sadd("weiboUrl:http://weibo.com/1708922835/BECe0nTtK","10680");         Set nameSet = jedis.smembers("weiboUrl:http://weibo.com/1708922835/BECe0nTtK");
        Iterator it = nameSet.iterator();        /**          * 想法是:这里可以查询出已经使用过该链接的帐号: 然后我们只需要找到not in这些帐号 就行了          */           while (it.hasNext()) {           String str = it.next();          System.out.println(str);         }           System.out.println(jedis.mget("10677:status","10677:industry","10677:webId"));  
找到所有使用某一条url的帐号; 然后查询出所有的not in (这条url使用过的帐号)  在sql里是这么理解的 然后设置到任务中去,但是在redis中如何 使用类似not in之类的方法呢  还想问下 这种redis设计方式是否可行,能有比较好的设计吗? 
解决方案1:

感觉全部用redis做不是特别合适,可以把已经执行过的用户与url放到redis中。这样去重的速度便上去了。任务执行的时候先在redis中判断下,如果重了,就再加个用户执行。 不用redis也是可以的,把用于去重的部分放到数据库的一张表中。并在内存中缓存这部分内容,要自己维护与数据库的一致性。

上一篇用servlet的类,写一个从页面上下载到Excel文件怎么下载
下一篇将excel中的表格数据复制到jsp页面上的表格
明星图片
相关文章
《 redis中多对多模型设计问题》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)