Scrapy框架进阶:redis 与 scrapy中的redis
一、redis的概述
- 背景
随着互联网+大数据时代的来临,传统的关系型数据库已经不能满足中大型网站日益增长的访问量和数据量。这个时候就需要一种能够快速存取数据的组件来缓解数据库服务I/O的压力,来解决系统性能上的瓶颈。 - Redis是什么?
Redis是一个高性能的,开源的,C语言开发的,键值对存储数据的nosql数据库。
NoSQL:not only sql,泛指非关系型数据库 Redis/MongoDB/Hbase Hadoop
关系型数据库:MySQL、oracle、SqlServer - 数据库的发展历史
1.在互联网+大数据时代来临之前,企业的一些内部信息管理系统,一个单个数据库实例就能满足系统的需求
单数据库实例
2.随着系统访问用户的增多,数据量的增大,单个数据库实例已经满足不了系统的读取需求
缓存(memcache)+单数据库实例
3.缓存可以缓解系统的读取压力,但是数据量的写入压力持续增大,
缓存+主从数据库+读写分离
4.数据量再次增大,读写分离以后,主数据库的写库压力出现瓶颈、
缓存+主从数据库集群+读写分离+分库分表
5.互联网+大数据时代来临,关系型数据库不能很好的存取一些并发性高,实时性高的,并且数据格式不固定的数据。
nosql+主从数据库集群+读写分离+分库分表 - NoSQL和SQL数据库的比较
• 适用场景不同:SQL数据库适合用于关系特别复杂的数据查询场景,nosql反之
• 事务:SQL对事务的支持非常完善,而nosql基本不支持事务
• 两者在不断的取长补短 - Redis特性
• Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
• Redis不仅仅支持简单的key-value类型的数据,同时还提供List,set等数据类型
• Redis支持数据的备份 - Redis有什么用?
Redis的主要作用:快速存取 - Redis应用场景(数据变化比较快的 不太重要的)
点赞/秒杀/直播平台的在线好友列表/商品排行榜 - 为什么要学习他:
- 爬虫的角度:
以前的保存数据: txt html json csv 数据库(mongo)
现在去进行分布式爬虫,需要redis
目标: 如何把一个普通的爬虫改写成分布式爬虫即可 [reids]
- 爬虫的角度:
了解它里面的一些常用的命令
补充:存取==读取+写入
二、redis的安装
双击解压
然后把解压的文件夹放到某个盘符下面 例如 E:\redis-latest
1.cd 到E:\redis-latest
2.链接服务的 redis-server
3.链接客户端 redis-cli
(可以打开两个cmd)
E:\redis-latest下的redis.windows.conf(配置文件)[直接拖到pycharm中]
参考:https://www.cnblogs.com/kreo/p/4423362.html
包含:
port 6379 、databases 16(表示16个数据库)、# bind 127.0.0.1
三、redis的五大命令(记一些常用的)
官网地址:https://redis.io/
命令地址:http://doc.redisfans.com/
帮助:1.help @string 2.文档(上面的/语雀)
keys * (获取所有的key)
app+“Tab”–>APPEND(自动补全,redis对大小写不敏感)
命令记不住:1.Tab 1.帮助
https://try.redis.io/(redis可视化)
3.1redis-string
- 增/改:
- set name dqyIT
- mset name aaa age 20
- 查:
- get name
- mget name age
- strlen name
- 删:
- del name
- expire name 3
- 其他:
- incr age 加1
- decr age 减1
- incrby age 2 加2
- decrby age 2 减2
- getrange name index1 index2 #“dqyI” 获取指定区间范围内的值 (注意与python的不同)
- setrange name index abc #“abcIT” 代表从第几位开始替换
3.2 redis-list
[在redis中List类型我们可以把它想成一个空心儿的竹子]
- lpush li 1 2 3 4 5
- rpush ls 1 2 3 4 5
- lpop li / rpop ls
- lindex li 0
- llen li
- lrem li 2 x 在li中删除2个x
- ltrim li 0 2 截取li从0到2的数据再赋值给li
- rpoplpush li ls 将li中最后一个压入ls中第一位
- lset li 0 x 将li中第一位换成x
- linsert li before x php 在x之前加字段php
3.2 redis-Hash
- 设值/取值/设值多个值/取多个值/取全部值/删除值
- hset user id 11
- hget user id
- hmset customer id 11 name juran age 26
- hgetall customer 返回全部(包括键)
- hvals customer 返回全部的值 hkeys customer 返回全部的键
- hmget customer id name age 只返回相应的值
- hdel user id 删除id