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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355

推荐阅读更多精彩内容