2021-06-17

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的安装

image.png
  • 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查看


image.png
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'))
image.png

五、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,
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容