分类
设计创意
办公创意
游客您好
第三方账号登陆
  • 点击联系客服

    在线时间:8:00-16:00

    客服电话

    153-9695-9698

    电子邮件

    84840@163.com
  • 搜酷APP

    随时掌握行业动态

  • 扫描二维码

    关注搜酷微信公众号

Redis中scan命令的深入讲解
[复制链接]
2019 - 09 - 06 发布
未知地区 | 未知职业
meitounao 发表于 2019-9-6 09:54:53 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
        前言
        熟悉Redis的人都知道,它是单线程的。因此在使用一些时间复杂度为O(N)的命令时要非常谨慎。可能一不小心就会阻塞进程,导致Redis出现卡顿。
        有时,我们需要针对符合条件的一部分命令进行操作,比如删除以test_开头的key。那么怎么获取到这些key呢?在Redis2.8版本之前,我们可以使用keys命令按照正则匹配得到我们需要的key。但是这个命令有两个缺点:
           
  •         没有limit,我们只能一次性获取所有符合条件的key,如果结果有上百万条,那么等待你的就是“无穷无尽”的字符串输出。       
  •         keys命令是遍历算法,时间复杂度是O(N)。如我们刚才所说,这个命令非常容易导致Redis服务卡顿。因此,我们要尽量避免在生产环境使用该命令。
        在满足需求和存在造成Redis卡顿之间究竟要如何选择呢?面对这个两难的抉择,Redis在2.8版本给我们提供了解决办法——scan命令。
        相比于keys命令,scan命令有两个比较明显的优势:
           
  •         scan命令的时间复杂度虽然也是O(N),但它是分次进行的,不会阻塞线程。       
  •         scan命令提供了limit参数,可以控制每次返回结果的最大条数。
        这两个优势就帮助我们解决了上面的难题,不过scan命令也并不是完美的,它返回的结果有可能重复,因此需要客户端去重。至于为什么会重复,相信你看完本文之后就会有答案了。
        SCAN 命令
        SCAN命令的有SCAN,SSCAN,HSCAN,ZSCAN。
        SCAN的话就是遍历所有的keys
        其他的SCAN命令的话是SCAN选中的集合。
        SCAN命令是增量的循环,每次调用只会返回一小部分的元素。所以不会有KEYS命令的坑。
        SCAN命令返回的是一个游标,从0开始遍历,到0结束遍历。
        今天我们主要从底层的结构和源码的角度来讨论scan是如何工作的。
        Redis的结构
        Redis使用了Hash表作为底层实现,原因不外乎高效且实现简单。说到Hash表,很多Java程序员第一反应就是HashMap。没错,Redis底层key的存储结构就是类似于HashMap那样数组+链表的结构。其中第一维的数组大小为2n(n>=0)。每次扩容数组长度扩大一倍。
        scan命令就是对这个一维数组进行遍历。每次返回的游标值也都是这个数组的索引。limit参数表示遍历多少个数组的元素,将这些元素下挂接的符合条件的结果都返回。因为每个元素下挂接的链表大小不同,所以每次返回的结果数量也就不同。
        SCAN的遍历顺序
        关于scan命令的遍历顺序,我们可以用一个小栗子来具体看一下。
        127.0.0.1:6379> keys *1) "db_number"2) "key1"3) "myKey"127.0.0.1:6379> scan 0 MATCH * COUNT 11) "2"2) 1) "db_number"127.0.0.1:6379> scan 2 MATCH * COUNT 11) "1"2) 1) "myKey"127.0.0.1:6379> scan 1 MATCH * COUNT 11) "3"2) 1) "key1"127.0.0.1:6379> scan 3 MATCH * COUNT 11) "0"2) (empty list or set)
        我们的Redis中有3个key,我们每次只遍历一个一维数组中的元素。如上所示,SCAN命令的遍历顺序是
                0->2->1->3
        这个顺序看起来有些奇怪。我们把它转换成二进制就好理解一些了。
                00->10->01->11
        我们发现每次这个序列是高位加1的。普通二进制的加法,是从右往左相加、进位。而这个序列是从左往右相加、进位的。这一点我们在redis的源码中也得到印证。
        在dict.c文件的dictScan函数中对游标进行了如下处理
        v = rev(v);v++;v = rev(v);
        意思是,将游标倒置,加一后,再倒置,也就是我们所说的“高位加1”的操作。
        这里大家可能会有疑问了,为什么要使用这样的顺序进行遍历,而不是用正常的0、1、2……这样的顺序呢,这是因为需要考虑遍历时发生字典扩容与缩容的情况(不得不佩服开发者考虑问题的全面性)。
        我们来看一下在SCAN遍历过程中,发生扩容时,遍历会如何进行。加入我们原始的数组有4个元素,也就是索引有两位,这时需要把它扩充成3位,并进行rehash。
       
        原来挂接在xx下的所有元素被分配到0xx和1xx下。在上图中,当我们即将遍历10时,dict进行了rehash,这时,scan命令会从010开始遍历,而000和100(原00下挂接的元素)不会再被重复遍历。
        再来看看缩容的情况。假设dict从3位缩容到2位,当即将遍历110时,dict发生了缩容,这时scan会遍历10。这时010下挂接的元素会被重复遍历,但010之前的元素都不会被重复遍历了。所以,缩容时还是可能会有些重复元素出现的。
        Redis的rehash
        rehash是一个比较复杂的过程,为了不阻塞Redis的进程,它采用了一种渐进式的rehash的机制。
        /* 字典 */typedef struct dict { // 类型特定函数 dictType *type; // 私有数据 void *privdata; // 哈希表 dictht ht[2]; // rehash 索引 // 当 rehash 不在进行时,值为 -1 int rehashidx; /* rehashing not in progress if rehashidx == -1 */ // 目前正在运行的安全迭代器的数量 int iterators; /* number of iterators currently running */} dict;
        在Redis的字典结构中,有两个hash表,一个新表,一个旧表。在rehash的过程中,redis将旧表中的元素逐步迁移到新表中,接下来我们看一下dict的rehash操作的源码。
        /* Performs N steps of incremental rehashing. Returns 1 if there are still * keys to move from the old to the new hash table, otherwise 0 is returned. * * Note that a rehashing step consists in moving a bucket (that may have more * than one key as we use chAIning) from the old to the new hash table, however * since part of the hash table may be composed of empty spaces, it is not * guaranteed that this function will rehash even a single bucket, since it * will visit at max N*10 empty buckets in total, otherwise the amount of * work it does would be unbound and the function may block for a long time. */int dictRehash(dict *d, int n) { int empty_visits = n*10; /* Max number of empty buckets to visit. */ if (!dictIsRehashing(d)) return 0; while(n-- && d->ht[0].used != 0) { dictEntry *de, *nextde; /* Note that rehashidx can't overflow as we are sure there are more * elements because ht[0].used != 0 */ assert(d->ht[0].size > (unsigned long)d->rehashidx); while(d->ht[0].table[d->rehashidx] == NULL) { d->rehashidx++; if (--empty_visits == 0) return 1; } de = d->ht[0].table[d->rehashidx]; /* Move all the keys in this bucket from the old to the new hash HT */ while(de) { uint64_t h; nextde = de->next; /* Get the index in the new hash table */ h = dictHashKey(d, de->key) & d->ht[1].sizemask; de->next = d->ht[1].table[h]; d->ht[1].table[h] = de; d->ht[0].used--; d->ht[1].used++; de = nextde; } d->ht[0].table[d->rehashidx] = NULL; d->rehashidx++; } /* Check if we already rehashed the whole table... */ if (d->ht[0].used == 0) { zfree(d->ht[0].table); d->ht[0] = d->ht[1]; _dictReset(&d->ht[1]); d->rehashidx = -1; return 0; } /* More to rehash... */ return 1;}
        通过注释我们就能了解到,rehash的过程是以bucket为基本单位进行迁移的。所谓的bucket其实就是我们前面所提到的一维数组的元素。每次迁移一个列表。下面来解释一下这段代码。
           
  •         首先判断一下是否在进行rehash,如果是,则继续进行;否则直接返回。       
  •         接着就是分n步开始进行渐进式rehash。同时还判断是否还有剩余元素,以保证安全性。       
  •         在进行rehash之前,首先判断要迁移的bucket是否越界。       
  •         然后跳过空的bucket,这里有一个empty_visits变量,表示最大可访问的空bucket的数量,这一变量主要是为了保证不过多的阻塞Redis。       
  •         接下来就是元素的迁移,将当前bucket的全部元素进行rehash,并且更新两张表中元素的数量。       
  •         每次迁移完一个bucket,需要将旧表中的bucket指向NULL。       
  •         最后判断一下是否全部迁移完成,如果是,则收回空间,重置rehash索引,否则告诉调用方,仍有数据未迁移。
        由于Redis使用的是渐进式rehash机制,因此,scan命令在需要同时扫描新表和旧表,将结果返回客户端。
        总结
        以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对ASPKU源码库的支持。

注:相关教程知识阅读请移步到Redis频道。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

精彩评论2

烈火裁决 发表于 2019-10-24 21:00:11 | 显示全部楼层
烈火裁决幸福直达
回复

使用道具 举报

我的生活与爱 发表于 2019-10-27 22:45:41 | 显示全部楼层
我的生活与爱夏日私语
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门下载分类
  • HTML模板
  • 免抠图元素
  • PPT模板
  • 平面设计素材
  • 电商淘宝素材
  • 高清背景图
关注我们
  • 官方微信公众号
  • APP应用下载
客服咨询
  • 153-9695-9698(工作日:9:00-16:00)
  • 87382376@qq.com

所有资源均是网上搜集或网友上传提供,任何涉及商业盈利目的均不得使用,否则产生的一切后果将由您自己承担。如有侵犯您的版权,请及时发邮件联系我们

Powered by 搜酷  © 2001-2021 搜酷-搜你所想! ( 苏ICP备08105188号 )

.net网站源码,1.76传奇客户端,1.76精品服务端,1.76客户端,1.76客户端下载,11g101-2,22美女网,35dir,35分类目录,360源,3d格斗网游,404源码社区,4567tv电影网,5.20表白,52酷播,55团购网,777淘宝导购网,77作文网,92gan,92jh,92美女,adobe photoshop 7.0 中文版,aijia,arm嵌入式开发板,b2bcms,b2c商城大全,baixiu,bbs猴岛,bt仓库,bt种子发布共享系统,bt种子发布系统,bt资源下载站,catia v5教程,catia入门视频教程,catia视频教程下载,cf彩虹,cms源码,cpa交友,cpa交友广告联盟,cpa交友联盟,crm免费版,dedecms 模板,dedecms采集,dedecms自动采集,dede模板,dede模板下载,dede源码,dede整站源码,discuz 模板,discuz风格,discuz论坛模板,discuz门户模板,discuz免费模板,discuz模板,discuz模板下载,discuz商业插件,dk2私服,dnf单机版秘籍,dnf外挂制作教程,dz插件,dz模板,eblog,ecshop模板,es文件浏览器官网,flash 源码,flash源代码,flash源码,gps车辆管理,h5邪恶游戏论坛,ige引擎,kan3,luna私服,maxcms,mkz军魂,mtv下载器,p2p网站,pdfelement,phpweb破解,php云人才系统,protel99se视频教程,proteus教程,proteus下载,qirewang,qqhot,qqnc,qq分享乐园,qq挂级,qq极品乐园,qq交易论坛,qq空间psd,qq空间psd源码,qq空间资源,qq模版,qq农场游戏,qq西游私服,qq象棋外挂,qq音速小游戏,q版3d网游,q版回合制网页游戏,q版回合制网游,q版网络游戏,q堂,ro仙境传说单机版,sf online,sf登陆器,shopex模板,smarty下载,stm32视频教程,u 影,ultraedit破解版,url转向,UU资源网,u影视,u影音,v5威客网,vip源码,v宝网,v商,wap程序,wap小说,wap小说网,wap小说网站,web幻想,web游戏源码,wincc教程,wow 3.35,wp商城,wp中文网,x站源码,yicms,yiyi.cc,zanblog,z奇兵,爱客电影,爱客影视,爱漫画网站,爱装网,安卓壁纸网,安卓内存卡清理,安卓网络电视,暗黑世界网页游戏,傲世千雄,傲视千雄,傲视千雄吧,傲视千雄官网,傲视千雄金币变态服,傲视千雄私服,八卦新闻网,霸王大陆sf,霸王大陆私服,白狐 影音,白狐影视,白小姐高级会员版,百度豆丁文档下载器,百度码,百度文档下载器,百度源,百度云盘资源分享吧,百度云资源分享链接群组,百炼成仙网页游戏,包你说,宝德棋牌,保洁网,笔记本电脑维修网,笔记本维修网,币众筹,毕业论文下载,表白节,博客导航,博客群建,猜的拼音,财经网站源码,财务软件培训,采集插件,采集侠,彩色电视机维修视频,茶叶中咖啡因的提取,畅享网,超人社区,超神传官网,成吉思汗1,成吉思汗2配置,成吉思汗2下载,成吉思汗sf,成人玩具网站,成人用品网址,初中数学资源网,穿越online,传奇1.76服务端,传奇1.76客户端,传奇1.76客户端下载,传奇1.76客户端下载完整版,传奇3 1.45 13魔法,传奇3 42魔法,传奇3客户端,传奇4g,传奇刺客私服,传奇客户端1.76版,传奇客户端下载1.76,传奇世界2.0,传奇私服刺客,传三私服,传世2.0,传世服务端,传说online,创富资源网,创业宝典,创业点子吧,创业点子网,刺客帝国,刺客私服,打印机培训,打印机维修培训,打印机维修视频,大话战国2,大闹天宫ol激活码,大闹天宫ol礼包,大闹天宫ol网页游戏,大闹天宫ol游戏,大闹天宫网页游戏,大唐豪侠下载,大学生交友,代理主机,贷齐乐,单片机视频教程下载,单片机学习视频,单片机学习网,单片机学习网站,弹弹堂单机版,弹弹堂客户端,蛋清ol,刀剑sf,刀剑私服,导航网站模板,盗号工具,盗梦侠,稻田黄鳝养殖技术,地方门户网,地方门户网站,地方门户网站系统,地区门户,地下城与勇士台服,帝国传奇私服,帝国模板,第六世界,第三方支付系统,第一人称射击网游,点评系统,电冰箱维修视频,电磁炉维修视频,电饭煲维修视频,电炉维修网,电脑技术教程,电脑上手机wap,电脑时间校对,电脑时间校准,电脑维修网站,电脑维修网站源码,电脑维修学习网站,电脑学习网,电脑学习网站,电脑资源,电脑组装视频教程,电视机维修视频,电视机维修视频教程,电视机维修网,电压力锅使用说明书,电压力锅说明书,电影网站程序,电影网站源码,电影源代码下载,电子商务源码,钓鱼网站源码,东游网,抖音资源视频在线观看,斗破苍穹2游戏,短文网,多多返利网,多多淘宝客,儿童教育资源网,儿童摄影模板,发泄网站,发型设计视频,发型设计视频教程,凡客v网上商城,凡客团购网,凡客网上购物商城,凡人修真网页游戏,泛站群,泛站群软件,防盗门网,房产网程序,房产网源码,仿快乐麻花,飞飞世界私服,分类信息系统,分享派,分享社区,封神网页游戏,疯狂蚂蚁,佛教网站源码,付费看电影,付费音乐网站,付费阅读网站,复印机培训,搞笑图片网,搞笑网站,歌曲批量下载,工程资料网,工业资源网,公司网站源码,公众号付费阅读,共享资源网,狗扑电影网,购物分享社区,购物分享网,购物分享网站,购物系统,光线cms,光线cms系统,广告联盟程序,广告任务,国家建筑标准设计网,海盗王1.38,海量小说网,海螺网购物分享社区,邯郸同城交友网,韩国化妆视频,横版三国,横版三国官网,红娘交友,猴岛网,猴岛游戏网,猴子岛论坛,猴子论坛,厚道论坛,互刷信誉平台,花边新闻网,华星国际,华中帝国,华中帝国技术论坛,华中帝国论坛,华中黑客帝国,化妆视频教程大全,画皮2ol,画皮2网页版,画皮2网页游戏,画皮2游戏,画皮2游戏官网,幻灯片代码,幻想游戏3.0,黄骅港潮汐表,黄鳝养殖技术大全,黄鳝养殖技术培训,黄鳝养殖技术视频,黄鳝养殖视频,会计电算化实务操作视频,婚嫁类网站,婚庆网站模板,机械工艺手册,机战世界解压密码,机战网络游戏,唧唧帝,唧唧帝笑话大全,唧唧帝笑话网,集群网,家教源码,建站之星模板,建站之星破解,建站之星破解版,剑网3私服,剑侠1私服,剑侠online,剑侠情缘 私服,剑侠情缘1私服,剑侠情缘3私服,剑侠情缘叁online,剑侠情缘网络版私服,剑侠世界sf,剑侠世界多玩论坛,剑侠世界私服发布网,剑侠私服,剑踪,将军令网站,交友程序,交友源码,教师节节目,街头篮球客户端下载,街头篮球私服,街舞教程,杰奇模版,解题网,金蛋网上商城,金蝶k3财务软件教程,金蝶k3视频教程,金蝶财务软件教程,金蝶财务软件视频教程,金蝶软件视频教程,金庸群侠传单机版,劲爆篮球下载,惊天战神官网,竞价单页,巨商私服,聚宝盆网,聚餐团购,聚美优品商城,决战sf,决战私服网,绝对女神私服,卡盟服务器,卡盟源码,开心ol私服,开心online私服,开心狗狗,开心淘开心,开心网代码,开运网,抗旱救灾,可外链的网盘,可外链网盘,克隆网站,刻字机维修,客户通讯录管理系统,客客网,空调维修大全,空调维修教程,空调维修视频教程,空间日志代码,空冥诀,酷开分享网,酷我资料网,酷源cms,快手作品点赞网站,昆仑online,乐淘网首页,乐网卡盟,乐享微信,冷柜维修,冷面汤怎么调,李居明官方网站,李居明视频,李居明网站,立刻贷,联盟程序,炼狱online,猎魂ol,裂变红包,六个方面对照检查材料,龙online,龙驹私服,龙腾世界sf,龙腾世界私服,龙心传奇,龙之谷 单机,龙之谷 单机版,龙之谷单机版,龙之谷单机版好玩吗,龙之谷单机版下载,龙珠online,龙珠网络游戏,鲁大师2013官方,鲁大师2013官方网,路尼亚,路尼亚战记官网,路尼亚战记私服,路尼亚战记台服,路尼亚战记下载,论坛模板,萝莉有杀气,洛克外挂,洛克王国 外挂,洛克王国waigua,洛克王国无毒外挂,麻辣香锅配方,马克斯程序,麦包包商城,漫画分享,猫扑贴贴,猫扑贴贴炫图库,猫扑炫图库,玫瑰镜糕,每推推,美甲视频下载,美丽说吧,美丽说团购,美丽说网站,美容上门服务,美文网文学,门户程序,门户模板,门户网站源码,门户站模板,梦幻卡修,梦幻龙族sf,梦幻诛仙服务器,梦回资源网,免费 网站,免费盗号软件,免费分享,免费分享网,免费共享,免费建论坛,免费图书,免费图书网,免费网络资源,面包网 奇热,明朝江湖,模板论坛,摩卡世界,蘑葫街 首页,魔界ol,魔界online,魔客吧,魔客网,魔力宝贝单机版,魔神契约,魔神争霸官网,魔兽3.35,魔兽世界服务端,魔咒ol,墨白资源网,母婴分享,木木不哭视频网站,南瓜园电影网,内涵图网,牛bb,农产品超市,农场2.0,女人世界网,女性门户,跑跑猴岛游戏论坛,跑跑卡丁车猴岛,烹调技术,朋友圈红包,捧腹网搞笑图片,捧腹笑话,霹雳舞教程,霹雳舞教学,漂亮网,平面广告设计师,平面设计素材网,七龙珠 online,七龙珠ol,七龙珠ol下载,七龙珠online,七龙珠online下载,七龙珠大型网络游戏,七龙珠网络游戏,七龙珠网络游戏大全,奇幻网游,奇迹客户端,奇迹生命之光,奇热电影网,奇热网 面包网,奇热网电影,骑士online,启点在线,千酷,强制加群,抢票助手,亲子活动网,亲子资源,亲子资源网,情人节网站,糗事百科网,趣玩网首页,全民暗黑,热奇网,热血传奇1.76客户端,热血传奇1.76客户端下载,热血江湖8.0,人人农场,日月传说,日月传说官网,日主题美化,融贷网,三国群英传ol单机版,三国演义ol,三国演义ol官网,三国演义ol礼包,三国演义ol论坛,三国演义ol什么职业好,三国演义网页游戏,三国演义游戏单机版,三界乾坤无限元宝,三五分类目录,三洋电饭煲维修,沙画教学视频,沙画培训,沙画学习,沙画学习教程,闪客网,商品资源网,商业网页游戏,上传歌曲的网站,烧菜网,社区动力,摄影网址大全,深度rom,什么值得买网,神马影院php源码,神奇黄鳝养殖技术,神奇影院首页,神泣单机版,神泣资源解包工具,神战九天,生成html,生死格斗ol单机版,生死格斗ol官网,生死格斗online,生死格斗单机版,生与死ol,师傅tv,石器时代2单机版,实物卡,食品商城,视频购物,视频聚合,视频压缩器,室外给水规范,收费视频,手机淘宝客,兽血沸腾私服,兽血沸腾游戏,蜀门游戏,蜀山神话官网,数学分析下册答案,水泥厂实习报告,私服登陆器,私服登录器,私服登入器,私服源码,搜狗资源,搜鱼,苏泊尔电压力锅使用,苏泊尔电压力锅使用方法,苏泊尔电压力锅使用说明书,苏泊尔高压锅说明书,素材火,她他社,淘宝导购网,淘宝导购网站,淘宝购物分享网站,淘宝互刷信誉,淘宝互刷信誉平台,淘宝刷单平台飞钻网,淘宝刷单平台首选米粒网,淘宝信誉互刷,淘客模板,特色小吃技术,天机ol,天机online,天龙八部2单机版,天龙八部3单机版,天堂1私服架设,天堂1私服网,天堂2服务端,天之炼狱2私服,天之刃官网,通达oa破解,同好网,偷拍工具,图片网站程序,图章生成器,兔兔影视网,兔子电影网,团购网源码,团购网站源码,沱沱工社官网,瓦罐营养快餐,外链网盘,外贸网站源码,完美世界国际版代码,网金单机,网络公司源码,网络购物分享网站,网络游戏单机版,网模招聘,网盘外链,网钛,网校资源,网页游戏服务端,网页游戏画皮2,网页游戏选22ck,网页游戏源码,网游热血三国,网站二次开发,网站集群系统,网站建设资源,微测评,微测试,微交易系统,微论坛,微信打车,微信端,微信跳转,问天ol,窝窝世界,我爱模板网,我要分享网,无限视距,无线营销,希望ol单机版,希希免费资源网,犀牛教程下载,犀牛软件视频教程,溪谷游戏,系统之家下载站,下载qq音速游戏,仙ol,仙境online,仙境传说单机版,仙境传说单机版技能,仙境传说单机版中文,仙侣奇缘2官网,小吃技术配方,小吃技术配方大全,小吃制作方法,小黑屋资源网,小蚂蚁门户,小蚂蚁网,小秘书网,小品大全网,小品屋,小饰品网站,小说搜索器,小说搜索网站,笑傲江湖ol捏人代码,笑傲江湖网游,笑话网站源码,新海盗王单机版,新浪发号,新闻网站源码,新仙剑ol激活码,新站长源码,新诛仙2,信誉刷钻,星尘传说sf,星尘传说单机,星尘传说服务端,星际文明ol,星际文明online,星空梦幻龙族,星空战记sf,星空战记官网,星外模板,虚拟wifi,虚拟主机系统,学电脑组装维修,学士学位申请理由,学校网站源码,训犬视频,讯类,讯睿,迅雷看看vip账号,迅游加速器免费账号,迅游加速器破解版2013,迅游破解版,要饭网,也买酒网,液晶显示器故障,液晶显示器维修教程,液晶显示器维修视频,一键内存清理,一手日源码资源,衣橱网,倚天2官网,倚天2龙驹,倚天2私服,易乐圈,易优网,音乐上传网站,音乐网站程序,音乐网站源码,英文外链,英语程序,营销软件站,影视热播网,影视搜,影音系统,影子资源网,佣兵天下游戏,永恒之塔单机版,优酷付费破解,悠悠电影网,游戏代练网,游戏美女陪玩价格表,游戏陪玩服务网站,游戏陪玩女,游戏陪玩网,游戏陪玩网站,游戏推广网站,游戏推广系统,游戏网站推广,有道海量词典,幼child video,鱼虾蟹游戏下载,娱乐门户,雨轩范文网,育儿健康,御剑江湖单机版,御剑江湖服务端,御剑江湖一键端,原创qq技术,源代码教育,源代码剧情介绍,源码爱好者,源码程序,源码集合,源码搜藏网,源码天下,远程视频嗅探器,运程测算,在线记帐,在线记账,在线客服程序,在线客服系统 源码,在线客服源码,在线资源库,战国online,战火红色警戒,站酷 素材,站酷素材,站酷素材网,站长目录,折800明日预告,真封神gm命令,真封神服务端,征途sf外挂,征途sf网站,征途服务端,征途私服客户端,征途私服客户端下载,征途私服网,征途私服网站,征途网络,征战四方2,政府cms,政府网站模板,支付宝红包口令分享,织梦采集侠,织梦二次开发,直销商城,致富机械,致富机械网,中国暗黑世界,中国创业点子网,中华特色小吃技术配方大全,中华养生网,中易广告联盟,周易 源码,诛仙online,诛仙服务端,诛仙网络游戏,主题资源,专业技术资格评审表,资料文档,资源爱好者,资源共享软件,自动答题器,自动发卡平台程序,自动售卡,足疗的手法,足疗视频教程,足疗手法,足疗手法视频,最好的农业网站,最新决战私服,最游记ol,醉品,醉品网,做菜网