python学习之第十九天

知识点目录
1.什么是分布式
2.scrapy如何实现分布式
3.什么是redis?
4.redis支持的数据类型有哪些?字符串 哈希 列表 集合 有序集合
5.redis的特点和优势
6.运行redis服务端的命令是什么?
7.运行redis客户端的命令是什么?
8.守护进程.后台进程
9.常用的端口有哪些?
10.复杂度(时间复杂度和空间复杂度)
11.商城秒杀的功能实现逻辑是什么
12.redis的备份与恢复 save/bgsave
13.redis默认支持的客户端连接量为多少?如何修改默认的客户端连接量

1.什么是分布式

分布式: 一个业务拆分成多个子系统,部署在不同的服务器上
集群:同一个业务,部署在多个服务器上

2.scrapy如何实现分布式

# 1.将同一套代码运行在不同设备上来提升采集效率的一种方式
# 2. scrapy不支持分布式


# 3. 可以配合scrapy-redis进行分布式操作
# https://www.jianshu.com/p/b40c1f973c54
# 3.1 pip install scrapy-redis

# 3.2 配置
"""
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
"""
# 3.3 配置pipeline
"""
'scrapy_redis.pipelines.RedisPipeline': 300,
"""

# 3.4 修改爬虫父类
# from scrapy_redis.spiders import RedisSpider
class Job51Spider(scrapy.Spider):--> class Job51Spider(RedisSpider):

# 3.5 注释掉start_urls

# 3.6 设置属性 redis_key = "爬虫名称:start_urls"

# 3.7 配置连接哪个redis
"""
# 指定redis数据库的连接参数
REDIS_HOST = "59.110.xxx.xxx"
REDIS_PORT = "6379"
REDIS_PARAMS ={
    'password': 'ranbospider',  # 服务器的redis对应密码
}
"""

# 3.8 修改master的redis,允许外部访问
# bind 192.168.xxxx

# 3.9 所有项目都运行起来,这时会卡住不动,等待采集网址

# 3.10 在redis客户端中,通过 lpush redis_key对应的名字 采集的网址
# lpush job51 https://search.51job.com/list/000000,000000,0000,00,9,99,python,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare=


# 3.11 分布式的数据如何汇总到一起?
# 可以通过连接同一个数据库来实现存储(MySQL)

3.什么是redis?

REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。

Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型

redis教程

4.redis支持的数据类型有哪些?

字符串 哈希 列表 集合 有序集合

# redis的作用
# 1. 购物车 https://blog.csdn.net/weixin_37012881/article/details/80000765
# 2. 商品秒杀 https://blog.csdn.net/hyy147/article/details/90257561
# 3. 数据缓存
# 4. 邮箱验证码/手机验证码超时时间
# 5. 分布式
import redis
# Redis StrictRedis
rd = redis.Redis(
    host="127.0.0.1",
    port=6379,
    db=2 # 默认16个数据库,编号从0开始
)

# 字符串类型
# 添加 set()
rd.set("name", "zhangsan")
# 查看 get()
name = rd.get("name")
print(name, type(name))
# 列表
# lpush=left push=左侧添加
rd.lpush("stu_name_list", "zhangsan", "lisi", "wangwu")
# rpush=right push=右侧添加
rd.rpush("stu_name_list", "zhangsan", "lisi", "wangwu")
# 删除左侧 lpop()
# rd.lpop()
# 删除右侧 rpop()
# rd.rpop()

# 查看 lrange()
stu_name_list = rd.lrange("stu_name_list", 0, 10)
stu_name_list = rd.lrange("stu_name_list", -5, -3)
print(stu_name_list)

# 哈希
#添加 hmset()
rd.hmset("stu_info", {"name": "zhangsan",'age':20})
# 查看 hmget()
name = rd.hmget("stu_info", "name",'age')
print(name)

#集合
# 添加 sadd()
rd.sadd("set_info","zhangsan",'lisi','wangwu')
# 查看 smembers()
name=rd.smembers("set_info")
print(name)

5.redis的特点和优势

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。

redis优势
1.性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。

2.丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。

3.原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。

4.丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

6.运行redis服务端的命令是什么?

1.找到redis安装目录
在这里插入图片描述
cmd 切换目录到redis并执行以下命令

在这里插入图片描述

7.运行redis客户端的命令是什么?

在这里插入图片描述

启动远程redis服务
redis-cli -h host -p port -a password
后面 -a password 没有密码可省略
在这里插入图片描述

8.守护进程.后台进程

守护进程:守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭
要使你的python服务不受终端影响而常驻系统,就需要将它变成守护进程

后台进程:守护进程(daemon)是一类在后台运行的进程,用于执行系统任务,受终端控制

区别:
守护进程没有控制终端,而后台进程还有
换句话说,守护进程肯定是后台进程,但反之不成立

9.常用的端口有哪些?

25 80 443 3306 6379
21 文件传输服务器(控制连接)(FTP)
23 运程终端服务器(TELNET)
25 简单邮件传输服务器(SMTP)
80 万维网服务器(HTTP)
443 https
3306 mysql数据库
6379 redis

10.复杂度(时间复杂度和空间复杂度)

时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述。

空间维度:是指执行当前算法需要占用多少内存空间,我们通常用「空间复杂度」来描述。

11.商城秒杀的功能实现逻辑是什么

秒杀业务主要逻辑:

判断登录
根据商品id从数据库拿到商品
判断库存,库存足够,进行秒杀,不足则结束
判断是否重复秒杀(我们限制一个用户只能秒杀一件商品,怎么判断?即从数据库根据商品和用户id 查询秒杀订单表,如果已经存在订单,说明重复秒杀 ,给出提示,退出)
以上都通过,那么该用户可以秒杀商品
注意:
执行秒杀逻辑是一个原子操作,是一个事务:

库存减1
下订单(写入秒杀订单)
其中一步没有成功,则回滚

12.redis的备份与恢复 save/bgsave

Redis SAVE 命令用于创建当前数据库的备份
创建 redis 备份文件也可以使用命令 BGSAVE,该命令在后台执行

13.redis默认支持的客户端连接量为多少?如何修改默认的客户端连接量

maxclients 的默认值是 10000,
1.可以在 redis.conf 中对这个值进行修改

2.以下实例我们在服务启动时设置最大连接数为 100000:
redis-server --maxclients 100000

猜你喜欢

转载自blog.csdn.net/qq_41150890/article/details/99873940