redis
一、redis的概述
1 redis是什么?
Redis 是一个高性能的,开源的 C语言开发的,键值对存储数据的NoSql数据库
nosql 数据库
MySql数据库
关系型数据库
存放持久化的数据
存在大量的I/O操作
Redis数据库
nosql 是非关系数据库 缓存数据库
读取速度比较快
2 为什么要学习它?
爬虫的角度
txt html json csv 数据库(mongo)
分布式爬虫(小公司里面也没有 如何把一个普通的爬虫改写成分布式爬虫即可 reids)
了解它里面的一些常用的命令
web的角度
专业深入的学习
3 如何学习redis?
对比式学的方法
I/O压力 通过解决实际的场景 说明了一下数据库的应用
4 redis的特性
速度快
支持数据库的持久化
支持的数据类型比较多 (5大数据类型)
5 redis的应用场景
数据变化比较快的 不太重要的
点赞、QQ消息列表/直播平台人数列表、秒杀
二、redis的安装
- redis的网址:https://redis.io/
redis在开发的时候是不支持win系统的,在这里并不能下载使用。得经过迭代处理后才得使用(自己的理解,并不一定正确)
此次安装使用老师提供的redis
双击解压
然后把解压的文件夹放到某个盘符下面,例如 E:\redis-latest
本机没有cmder,为了确保跟上老师的节奏,先自行下载发装一下。-
首先链接服务的:redis-server
image.png
版本号:3.0.503,端口:6379,进程号:3132
-
其次链接客户端:redis-cli
image.png -
试一下数据库
image.png
三、redis的五大命令
1、redis-string
- 是redis中最基本的命令,一个Key对应一个value,最大的数据不能超过512M
set name jerry:key 是name, value是 jerry
get name: 取值,得到jerry
mset age 30 home hb: 设置多个值
mget age home: 获取多个值
strlen name: 查询长度
append name 123: 追加内容
del name: 删除
incr num: + 1
decr num: -1
incrby num 10: +10
decrby num 10: -10
GETRANGE name 0 3 :从0开始你要截取谁 就取谁的索引 如果超出最大范围 就以全部数据为准
GETRANGE name 0 -1 :获取全部
setrange name 0 abc
2、List类型
在redis中List类型我们可以把它想成一个空心的竹子
lpush li 1 2 3 4 5 :添加5 4 3 2 1
rpush ls 1 2 3 4 5:添加1 2 3 4 5
lrange li 0 -1 :查询
rpop li :删除最右
lpop li :删除最左
lindex ls 0 :根据索引获取元素
lrem ls1 2 4 ls1中删除2个4
ltrim ls1 0 2 截取0 - 2的元素在给ls1赋值
rpoplpush li ls 把li中的最后一个元素添加到ls中第一个位置上
lset ls 0 1 把ls中0的位置替换成1
LINSERT ls before 1 0 在1之前添加0
3、redis-Hash
hash 是一个键值对的集合(value)
hset user id 1 :添加值
hget user id :获取值
hmset users id 1 name jerry age 30 :添加多个值
hvals users :取多个值
hmget users id age name :取多个值
hgetall users :获取每一项
hkeys users :获取所有的Key
4、redis-set 无序不重复
sadd s2 1 5 3 2 2 4: 添加数据1 2 3 4 5
SMEMBERS s2 :查询数据
SISMEMBER s2 1: 验证元素是否存在, 1就是存在, 0就是不存在
scard s2 :查询集合中元素的个数
SRANDMEMBER s2 :随机取值
spop s1 :随机删除,可做不重复抽奖
smove s2 s3 1 :删除s2中的1添加到s3中
5、redis-zset 有序不重复
它是需要一个分数
zadd z2 70 juran 60 jerry 80 tony 90 amy :添加数据
zrange z2 0 -1 :查看数据
zrange z2 0 -1 withscores :带分数查询
ZRANGEBYSCORE z1 60 90 :根据范围来查找
四、python操作redis
第一步 安装 redis
pip install redis第二步 python操作redis
1 导入redis
2 链接reids --> 链接地址 端口号
3 逻辑实现(增删改查)
import redis
class stringRedis():
def __init__(self):
self.r = redis.StrictRedis(host='127.0.0.1', port='6379')
# self.r=redis.Redis()
def string_set(self, k, v):
res = self.r.set(k, v)
print(res)
if __name__ == '__main__':
s = stringRedis()
s.string_set('name','yaoqi')
# 运行结果为True
返回cmder查看
import redis
class stringRedis():
def __init__(self):
self.r = redis.StrictRedis(host='127.0.0.1', port='6379',decode_responses=True)
# self.r=redis.Redis()
def string_set(self, k, v):
res = self.r.set(k, v)
print(res)
def string_get(self,k):
res =self.r.get(k)
return res
if __name__ == '__main__':
s = stringRedis()
# s.string_set('name','yaoqi')
print(type(s.string_get('name')))
print(s.string_get('name'))
五、scrapy-redis
学习目标
1 了解scrapy-redis的工作流程(面试)
2 会把普通的scrapy爬虫改写成分布式爬虫
六、scrapy-redis的工作流程
分布式 多个人在一起做不同的事
集群 多个人在一起做相同的事
问:scrapy和scrapy-redis有啥区别?
scrapy python的爬虫框架 爬取效率极高 具有高度的定制型,不支持分布式
scrapy-redis 基于redis数据库 运行在scrapy之上的一个组件 可以让scrapy支持分布式开发了 支持主从同步
分布式爬虫的优点
1 可以充分利用多态机器的带宽
2 可以充分利用不同电脑的ip
3 多台机器爬取效率更高
于此同时就会有问题
1 多台电脑我怎么保证数据不会出现重复的
2 多台电脑怎么保证数据存到同一个地方呢
以上内容还勉强听懂点,下面这些就开始云里雾里了
如何实现分布式爬虫(步骤)
1 我们发现需要安装 pip install scrapy-redis
2 settings文件 学问大了 好多地方和我们的不一样
3 尝试的运行了一下这个爬虫文件 发现redis里面多了3个文件 dmoz:items dmoz:requests dmoz:dupefilter
第一步 创建scrapy项目
第二步 创建爬虫文件
第三步 逻辑操作
改的是第二步爬虫文件
1 模块
2 继承的父类
3 把start_urls 改写成 reids_key='爬虫文件名字'
4 settings文件当中的内容
去重过滤
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
scheduler队里
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
数据持久化
SCHEDULER_PERSIST = True
ITEM_PIPELINES = {
'example.pipelines.ExamplePipeline': 300,
'scrapy_redis.pipelines.RedisPipeline': 400,
}