分布式爬虫——Redis
Redis介绍
背景
- 随着互联网+大数据时代的来临,传统的关系型数据库已经不能满足中大型网站日益增长的访问量和数据量。这个时候就需要一种能够快速存取数据的组件来缓解数据库服务I/O的压力,来解决系统性能上的瓶颈。
数据库的发展历史
在互联网+大数据时代来临之前,企业的一些内部信息管理系统,一个单个数据库实例就能满足系统的需求单数据库实例
随着系统访问用户的增多,数据量的增大,单个数据库实例已经满足不了系统的读取需求缓存(memcache)+单数据库实例
缓存可以缓解系统的读取压力,但是数据量的写入压力持续增大,缓存+主从数据库+读写分离
数据量再次增大,读写分离以后,主数据库的写库压力出现瓶颈、缓存+主从数据库集群+读写分离+分库分表
互联网+大数据时代来临,关系型数据库不能很好的存取一些并发性高,实时性高的,并且数据格式不固定的数据。nosql+主从数据库集群+读写分离+分库分表
Redis是什么?
RediRedis是一个高性能的,开源的,C语言开发的,键值对存储数据的nosql数据库。
NoSQL:not only sql,泛指非关系型数据库 Redis/MongoDB/Hbase Hadoop
关系型数据库:MySQL、oracle、SqlServer
Redis特性
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的
key-value
类型的数据,同时提供List,set等数据类型 - Redis支持数据的备份
Redis怎么用
- 官网地址:https://redis.io/
- 命令地址:http://doc.redisfans.com/
在Ubuntu操作系统启动Redis
- 安装
sudo apt-get install redis-server
- 卸载
sudo apt-get purge --autor-remove redis-server
- 打开服务
sudo service redis start
- 手动启动
sudo service redis-server stop
- 手动停止
sudo service redis stop
- 关闭服务
sudo service redis stop
- 查看启动
ps aux|redis-server
- 客户端连接
redis-cli -h[IP地址] -p[端口号]
其他机器访问本机的redis服务器
- 想要让其他机器访问本机的redis服务器,那么要修改/etc/redis/redis.conf的配置文件,将bind改成bind[自己的IP地址或者0.0.0.0],其他机器才能访问
- 注意:bing绑定的是本机网卡的IP地址,也不是想让其他机器连接的IP地址,如果有多块网刊,那么可以绑定多个网卡的IP地址,如果绑定到的是0.0.0.0,那么意味着其他机器可以通过本地所有的IP地址进行访问。
在Ubuntu下启动redis服务redis-server
:启动redis服务Uredis-cli
:连接redis服务器
Redis常用的五大数据类型
redis数据库的简单使用dbsize
:查看当前数据库的key数量key *
:查看key内容flushdb
:清空当前数据库的key的数量dlushall
:清空所有库的key(慎用)extists key
判断key是否存在type
:查看数据类型
redis-stringget
: 取值语法:get [key值] [value值]
set
: 设置单个值语法:set [key值]
mset
:设置多个值语法: mset [多个key值] [多个value值]
mget
: 取多个值语法:mget [多个key值]
append
:添加值语法:append [key值] [value值]
del
:删除key语法:del [key值]
strlen
:求字符串的长度语法:strlen [key值]
incr
:每执行一次增加1语法:incr [key值]
decr
:每执行一次减少1语法:decr [key值]
incrby
:指定增加多少语法:incrby [key值] [incrment]
decrby
:指定减少多少语法:decrby [key值] [incrment]
getrange
:获取指定区间范围内的值(类似于Python中切片,但左闭右也闭)语法:getrange [key值] [start开始值] [结束值]
setrange
:代表从第几位开始替换(当替换的长度大于要替换的值的时候,仍要替换)语法:setrange [key值] [要替换的值的位置] [替换的值]
expire
:设置key值指定超时时间语法:expire [key值] [seconds超时时间]
setex
:设置key值并指定过期时间语法:setex [key值] [seconds超时时间] [value值]
redis-list(单值多value)
小技巧:列表的写法通过前面加上l
来区分
列表是简单的字符串列表,按照插入顺序排序,可以添加一个元素列表的头部(左边)或者尾部(右边)它的底层实际是个链表lpush
:当输入0 1 2 3 4 5 的时候,使用lange取出来的结果为5 4 3 2 1 (lpush为倒叙输出)写法: lpush [key值] [value值]
rpush
:当输入0 1 2 3 4 5的时候,使用lange取出的结果为0 1 2 3 4 5 (rpush为正序输出)写法rpush[key值] [value值]
lrange
:获取中所有的值写法: lrange [key值] [开始值] [结束值]
lpop
:移除最左边的元素写法 : lpop [key值]
rpop
:移除最右边的元素写法:rpop[key值]
lindex
按照索引下标获得元素(从上到下)写法 :llen [key值]
llen
:求列表长度写法:llen [key值]
lrem
:删除n个value写法:lrem [key] [删除的个数] [删除的值]
rpoplpush
:将一个列表中最后一个的值压入另一个列表中去写法:rpoplpush [key值] [key值]
lset
:将索引值替换语法:写法:lset [key值] [索引值] [要替换的值]
linsert key before/after
写法1:linsert [key值] before ['value值'] ['添加的字段']
在什么之前写法2:linsert [key值] after ['value值'] ['添加的字段']
在什么之后
redis-Hash
hash是一个键值对集合
hash是一个string类型的field和value的映射表,hash特别适合存储对象
小技巧:哈希写法前面都要加上一个hhset
:设置值语法: hset [key值] [field值][value值]
hget
:取值语法:hget [key值] [field值]
hmget
: 取多个值语法:hmget [key值] [多个field值]
hmset
:设置多个值语法:hmset [key值] [field值对应的value值,field值对应的value值]
hgetall
:返回全部语法: hgetall [key值]
hdel
:删除指定key中的field值语法:hdel [key值] [field值]
del
:指定删除的key值语法:del [key值]
hlen
:求长度语法:hlen [key值]
hexists
:返回key中存在的field值,如果存在返回1,如果不存在返回0语法 : hexists [key值] [field值]
hkeys
:返回key中所有的field字段语法:返回key中所有的field字段
hvals
:返回value值返回key中所有的value字段
redis-set(不重复)
set是string类型的无序集合
小技巧:集合是S开头sadd
:添加集合(当遇到重复的会自动请重)语法 sadd [key值] [多个member值]
smembers
:取集合中的值语法 smembers [key值]
sismember
:查看key中的value值(如果存在则返回1,如果不存在则返回0)语法:sismember [key值] [member]
scard
:获取集合里面的元素个数语法:scard [key值]
srem
:删除集合中的元素语法:srem [key值] [member值]
srandmember
:随机读取集合中的值语法 srandmember [key值]
spop
:随机出栈集合中的值,当集合中没有元素的时候为空语法 : spop [key值]
smover
:将第一个key值移动到第二个key值,当集合不存在的时候,创建集合语法:smover [key值] [移到到的key1值] [key中要移到到key1中的member值]
redis-Zset
小技巧z
为有序集合zadd
:添加有序的集合语法:ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN
zrange
:返回有序集合中所有的值语法:zrange [key值] [start开始值] [stop结束值]
zrangebyscore
:根据开始和结束值来取值zrangebyscore [key值] [min最小值] [最大值]
zrem
:删除元素语法:zrem [key值] [member值]
zcard
:求总条数语法:zcard [key值]
zcount
:求值的个数语法:zcount [key值] [最大值] [最小值]
zrank
:返回对应的key值下标语法:zrank [key值] [member值]