文档章节

[爬虫]抓取知乎百万用户信息之Redis篇

zuin
 zuin
发布于 2017/02/03 18:09
字数 889
阅读 50
收藏 0

Redis安装

 Redis官方并没有推出windows版本,人家觉得linux已经够了,开发windows版本影响开发进度,还好微软有一个团队维持着Redis的windows版本,网上有很多介绍Redis安装的博客,大多数是敲各种命令行。这里有Redis的msi版本,只需要像安装普通软件一样点击下一步,下一步即可地址:https://github.com/MSOpenTech/redis/releases/download/win-3.2.100/Redis-x64-3.2.100.msi

RRedis配置

Redis配置文件详解 http://www.cnblogs.com/kreo/p/4423362.html

找到Redis.windowserver.conf

 

这里要注意的两点:1.远程连接

#
# ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the
# internet, binding to all the interfaces is dangerous and will expose the
# instance to everybody on the internet. So by default we uncomment the
# following bind directive, that will force Redis to listen only into
# the IPv4 lookback interface address (this means Redis will be able to
# accept connections only from clients running into the same computer it
# is running).
#
# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES
# JUST COMMENT THE FOLLOWING LINE.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind 0.0.0.0
将bind 127.0.0.1 修改成bind 0.0.0.0这样redis可以接受远程连接

内存限制

# NOTE: since Redis uses the system paging file to allocate the heap memory,
# the Working Set memory usage showed by the Windows Task Manager or by other
# tools such as ProcessExplorer will not always be accurate. For example, right
# after a background save of the RDB or the AOF files, the working set value
# may drop significantly. In order to check the correct amount of memory used
# by the redis-server to store the data, use the INFO client command. The INFO
# command shows only the memory used to store the redis data, not the extra
# memory used by the Windows process for its own requirements. Th3 extra amount
# of memory not reported by the INFO command can be calculated subtracting the
# Peak Working Set reported by the Windows Task Manager and the used_memory_peak
# reported by the INFO command.
#
maxmemory 2000mb
这里可以修改最大内存,建议放大点Redis比较还是吃内存的

连接Reids类的封装

Redis的C#驱动ServiceStack.Redis使用NuGet进行安装,由于这个类库已经商业化了,在4.0版本开始限制数量,每小时不得超过6000次,建议安装3.9版本

在这个爬虫系统中,开始时候我只使用一台电脑装Redis,后来发现这台电脑特别卡,后来换成三台电脑装Redis,一个负责hash表,一个负责UrlNext队列和Urltoken队列,一台负责User队列,由于实验室的电脑非常老旧,还是很卡。最后又加持2台电脑,实验室三台电脑负责hash表,我的电脑负责User队列,征用学妹电脑用作任务队列。

这个类命名为RedisCore

Ip地址列表

public static List<string> ips = new List<string>()

        {

            "59.74.169.54",

            "59.74.169.57",

            "59.74.169.52",

            "59.74.169.58",

            "59.74.169.39"

        };

 

对插入队列的封装。

Redis队列是有list这个数据结构实现的,从右边插入,左边弹出就可以实现队列

插入

public static bool PushIntoList(int type, string key, string value)

        {

            bool Result = false;

            using (RedisClient Redis = new RedisClient(ips[type - 1], 6379))

            {

                Redis.ConnectTimeout = 2000;

                Result = Redis.RPush(key, Encoding.UTF8.GetBytes(value)) > 0;

            }

            return Result;

        }

 

注意这个非托管资源要手动释放

弹出

public static string PopFromList(int type, string key)
        {
            string result = string.Empty;
            try
            {
             
                using (RedisClient Redis = new RedisClient(ips[type - 1], 6379))
                {
                    Redis.ConnectTimeout = 2000;
                    result = Encoding.UTF8.GetString(Redis.LPop(key));
                }
            
            }
            catch
            {
               
            }
            return result;
        }

Hash表有三个电脑,到底放到那一台,首先对key进行hash运算,取绝对值,对3取余,为0 就放到3号机器,为1放到4号机器,为2 放到5号机器

,如果hash表已经存在就会插入失败返回false,不存在插入成功返回true

public static bool InsetIntoHash(int type, string hashid, string key, string value)
        {
            bool result = false;
            try
            {
                using (RedisClient Redis = new RedisClient(ips[type - 1], 6379))
                {
                    Redis.ConnectTimeout = 2000;
                    result = Redis.SetEntryInHashIfNotExists(hashid, key, value);
                }
            }
            catch { }

            return result;
        }
      

 

© 著作权归作者所有

zuin
粉丝 0
博文 10
码字总数 7658
作品 0
咸宁
私信 提问
JIANGWL/ZhihuSpider

ZhihuSpider User spider for www.zhihu.com 1.Install python3 and packages Make sure you have installed python3. Using pip to install dependencies. pip install Image requests beau......

JIANGWL
2016/12/12
0
0
PHP爬虫:百万级别知乎用户数据爬取与分析

这次抓取了110万的用户数据,数据分析结果如下: 开发前的准备 安装Linux系统(Ubuntu14.04),在VMWare虚拟机下安装一个Ubuntu; 安装PHP5.6或以上版本; 安装MySQL5.5或以上版本; 安装cur...

snowing1990
2016/04/06
106
0
32个Python爬虫项目让你一次吃到撑

今天为大家整理了32个Python爬虫项目。 整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心。所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)O WechatSogou [1]- 微信公众号爬...

qq_26948675
2017/11/08
0
0
爬了知乎200万数据,图说程序员都喜欢去哪儿工作

因为最近和朋友吃饭,大家都到了大三季,都在纠结自己该以哪里作为自己职业发展的起点?也想看看自己的背景,能不能找到靠谱的师哥师姐帮忙,那么师哥师姐都在哪里发光发亮呢? 我当时也是午休...

小数点
2017/11/28
0
0
Python3爬虫视频学习教程

大家好哈,现在呢静觅博客已经两年多啦,可能大家过来更多看到的是爬虫方面的博文,首先非常感谢大家的支持,希望我的博文对大家有帮助! 最近,主要的任务就是开发性感美女图片大全,使用p...

yangjiyue0520
2017/11/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
633
10
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
34
0
spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
19
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
63
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
63
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部