Crawler4j的Redis队列实现以及其中的坑

crawler4j是java中比较流行的一个爬虫空间,结构严谨,功能不错。那么为什么要实现redis队列,因为这个框架默认是BerkeleyDB,大家使用时,会在项目指定文件夹生成数据库相关的文件,不利于实现分布式,而且效率也比不是特别高。所以要想实现高效率的分布式,可以使用redis队列。

crawler4j没有官方的redis队列支持,但是在github上有个第三方的redis版本,链接:https://github.com/ranjeet-floyd/distributed-crawler4j-redis
这不是一个插件或者中间键,而是将crawler4j队列部分重写,是个完整的项目,使用的时候直接clone下来作为完整的项目使用即可。
这个项目比较忠实于原版框架。注意了,这也就是问题所在,BerkeleyDB的结构不一定适合redis上面,所以很多东西有坑。这个框架拿来使用时一定要定制化修改,不然后果严重!
首先,这个项目中,不能设置redis db,使用了好几个db,而且都是血死,然后这个项目初始化时,会清空之前的数据,而清空的方式是:flush db,可怕!要是你redis中有其他的项目或者数据,也会被清空,这就很可怕了。还有,redis数据存储用到了大量的string,这样导致了数据散乱,不容易维护,这也就是为什么清空数据用的是flush db,因为数据太多,程序自己也不知道有哪些key要删除。
所以这个项目可以使用,但是使用之前要进行修改。
这个项目和crawler4j相关的内容,我在我的课程中也进行了详细的讲解,有兴趣的可以去听听。

Screen Shot 2019-12-08 at 20.24.51 PM

作者:神秘的站长

发表评论