分布式爬虫——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服务U
分布式爬虫——Redis
redis-cli:连接redis服务器
分布式爬虫——Redis

Redis常用的五大数据类型

redis数据库的简单使用
dbsize:查看当前数据库的key数量
key *:查看key内容
flushdb:清空当前数据库的key的数量
dlushall:清空所有库的key(慎用)
extists key判断key是否存在
type:查看数据类型


redis-string
get: 取值
语法:get [key值] [value值]
分布式爬虫——Redis
set: 设置单个值
语法:set [key值]
分布式爬虫——Redis
mset:设置多个值
语法: mset [多个key值] [多个value值]
分布式爬虫——Redis
mget: 取多个值
语法:mget [多个key值]
分布式爬虫——Redis
append:添加值
语法:append [key值] [value值]
分布式爬虫——Redis
del:删除key
语法:del [key值]
分布式爬虫——Redis
strlen:求字符串的长度
语法:strlen [key值]
分布式爬虫——Redis
incr:每执行一次增加1
语法:incr [key值]
分布式爬虫——Redis
decr:每执行一次减少1
语法:decr [key值]
分布式爬虫——Redis
incrby:指定增加多少
语法:incrby [key值] [incrment]
分布式爬虫——Redis
decrby:指定减少多少
语法:decrby [key值] [incrment]
分布式爬虫——Redis
getrange:获取指定区间范围内的值(类似于Python中切片,但左闭右也闭)
语法:getrange [key值] [start开始值] [结束值]
分布式爬虫——Redis
setrange:代表从第几位开始替换(当替换的长度大于要替换的值的时候,仍要替换)
语法:setrange [key值] [要替换的值的位置] [替换的值]
分布式爬虫——Redis
expire:设置key值指定超时时间
语法:expire [key值] [seconds超时时间]

setex:设置key值并指定过期时间
语法:setex [key值] [seconds超时时间] [value值]
分布式爬虫——Redis
redis-list(单值多value)
小技巧:列表的写法通过前面加上l来区分
列表是简单的字符串列表,按照插入顺序排序,可以添加一个元素列表的头部(左边)或者尾部(右边)它的底层实际是个链表
lpush:当输入0 1 2 3 4 5 的时候,使用lange取出来的结果为5 4 3 2 1 (lpush为倒叙输出)
写法: lpush [key值] [value值]
分布式爬虫——Redis
rpush:当输入0 1 2 3 4 5的时候,使用lange取出的结果为0 1 2 3 4 5 (rpush为正序输出)
写法rpush[key值] [value值]
分布式爬虫——Redis
lrange:获取中所有的值
写法: lrange [key值] [开始值] [结束值]

lpop:移除最左边的元素
写法 : lpop [key值]
分布式爬虫——Redis

rpop:移除最右边的元素
写法:rpop[key值]
分布式爬虫——Redis
lindex按照索引下标获得元素(从上到下)
写法 :llen [key值]
分布式爬虫——Redis
llen:求列表长度
写法:llen [key值]
分布式爬虫——Redis
lrem:删除n个value
写法:lrem [key] [删除的个数] [删除的值]
分布式爬虫——Redis

rpoplpush:将一个列表中最后一个的值压入另一个列表中去
写法:rpoplpush [key值] [key值]
分布式爬虫——Redis
lset:将索引值替换
语法:写法:lset [key值] [索引值] [要替换的值]
分布式爬虫——Redis
linsert key before/after
写法1:linsert [key值] before ['value值'] ['添加的字段']在什么之前
写法2:linsert [key值] after ['value值'] ['添加的字段']在什么之后
分布式爬虫——Redis

redis-Hash
hash是一个键值对集合
hash是一个string类型的field和value的映射表,hash特别适合存储对象
小技巧:哈希写法前面都要加上一个h
hset:设置值
语法: hset [key值] [field值][value值]

hget:取值
语法:hget [key值] [field值]
分布式爬虫——Redis
hmget: 取多个值
语法:hmget [key值] [多个field值]

hmset:设置多个值
语法:hmset [key值] [field值对应的value值,field值对应的value值]

hgetall :返回全部
语法: hgetall [key值]
分布式爬虫——Redis

hdel:删除指定key中的field值
语法:hdel [key值] [field值]
分布式爬虫——Redis

del:指定删除的key值
语法:del [key值]
分布式爬虫——Redis
hlen:求长度
语法:hlen [key值]
分布式爬虫——Redis
hexists:返回key中存在的field值,如果存在返回1,如果不存在返回0
语法 : hexists [key值] [field值]
分布式爬虫——Redis

hkeys:返回key中所有的field字段
语法:返回key中所有的field字段

hvals:返回value值
返回key中所有的value字段
分布式爬虫——Redis
redis-set(不重复)
set是string类型的无序集合
小技巧:集合是S开头
sadd:添加集合(当遇到重复的会自动请重)
语法 sadd [key值] [多个member值]
分布式爬虫——Redis
smembers:取集合中的值
语法 smembers [key值]
分布式爬虫——Redis
sismember:查看key中的value值(如果存在则返回1,如果不存在则返回0)
语法:sismember [key值] [member]
分布式爬虫——Redis
scard:获取集合里面的元素个数
语法:scard [key值]
分布式爬虫——Redis
srem:删除集合中的元素
语法:srem [key值] [member值]
分布式爬虫——Redis

srandmember:随机读取集合中的值
语法 srandmember [key值]
分布式爬虫——Redis

spop:随机出栈集合中的值,当集合中没有元素的时候为空
语法 : spop [key值]
分布式爬虫——Redis

smover:将第一个key值移动到第二个key值,当集合不存在的时候,创建集合
语法:smover [key值] [移到到的key1值] [key中要移到到key1中的member值]

redis-Zset
小技巧z为有序集合
zadd:添加有序的集合
语法:ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN
分布式爬虫——Redis
zrange:返回有序集合中所有的值
语法:zrange [key值] [start开始值] [stop结束值]
分布式爬虫——Redis
zrangebyscore:根据开始和结束值来取值
zrangebyscore [key值] [min最小值] [最大值]
分布式爬虫——Redis
zrem:删除元素
语法:zrem [key值] [member值]
分布式爬虫——Redis
zcard:求总条数
语法:zcard [key值]
分布式爬虫——Redis
zcount:求值的个数
语法:zcount [key值] [最大值] [最小值]
分布式爬虫——Redis
zrank:返回对应的key值下标
语法:zrank [key值] [member值]
分布式爬虫——Redis