一.redis的适用场景?
1、缓存——热数据
select 数据库前查询redis,有的话使⽤redis数据,放弃select 数据库,没有的话,
select 数据库,然后将数据插⼊redis
update或者delete数据库钱,查询redis是否存在该数据,存在的话先删除redis中数据,
然后再update或者delete数据库中的数据
2、计数器
3、队列
4、位操作(⼤数据处理)
5、分布式锁与单线程机制
6、最新列表
7、排⾏榜
什么是分布式锁?
分布式锁是控制分布式系统之间同步访问共享资源的一种方式。
在分布式系统中,常常需要协调他们的动作。
如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源
,那么访问这些资源的时候,
往往需要互斥来防止彼此干扰来保证一致性
在这种情况下,便需要使用到分布式锁。
实现分布式锁的方式
1.基于数据库实现分布式锁
2.基于缓存(redis,memcached,tair)实现分布式锁
3.基于Zookeeper实现分布式锁
二.反爬有哪些策略,你是如何克服的?
1. 限制IP地址单位时间的访问次数
减少单位时间的访问次数,减低采集效率
2. 屏蔽ip
使⽤代理ip
3. ⽤户登录才能访问⽹站内容
模拟⽤户提交登录表单
4. header User-Agent 检查⽤户所⽤客户端的种类和版本
设置User-Agent
5. Referer 是检查此请求由哪⾥来,通常可以做图⽚的盗链判断
⾃定义Referer字段
6. Cookies
⽹站可能会检测 Cookie 中 session_id 的使⽤次数,如果超过限制,
就触发反爬策略
定时向⽬标⽹站发送不带 Cookies 的请求,提取响应中 Set-cookie
字段信息并保存。爬取⽹⻚时,把存储起来的 Cookies 带⼊
Headers 中
7. 动态加载
⽹站使⽤ ajax 动态加载内容
可以先截取 ajax 请求分析⼀下,有可能根据 ajax 请求构造出相应
的 API 请求的 URL 就可以直接获取想要的内容,通常是 json 格式,
反⽽还不⽤去解析 HTML。
然⽽,很多时候 ajax 请求都会经过后端鉴权,不能直接构造 URL
获取。这时就可以通过 PhantomJS+Selenium 模拟浏览器⾏为,抓
取经过 js 渲染后的⻚⾯
三.集群与分布式的区别 ?
集群是个物理形态,分布式是个⼯作⽅式
分布式是指将不同的业务分布在不同的地⽅。 ⽽集群指的是将⼏台服务器集中
在⼀起,实现同⼀业务。
四.鉴权
是指验证⽤户是否拥有访问系统的权利
常⽤的鉴权有四种:
HTTP Basic Authentication
session-cookie
Token 验证
OAuth(开放授权)
详情链接url:
https://blog.csdn.net/wang839305939/article/details/78713124/
五. Mongodb与Mysql的区别
Mysql是关系型数据库,Mongodb是⾮关系型(nosql)数据库
Mongodb的适⽤范围
1.更⾼的写⼊负载
默认情况下,MongoDB更侧重⾼数据写⼊性能,⽽⾮事务安全,MongoDB很适合业务系
统中有⼤量“低价值”数据的场景。但是应当避免在⾼事务安全性的系统中使⽤MongoDB,
除⾮能从架构设计上保证事务安全。
2.⾼可⽤性
MongoDB的复副集(Master-Slave)配置⾮常简洁⽅便,此外,MongoDB可以快速响应的
处理单节点故障,⾃动、安全的完成故障转移。这些特性使得MongoDB能在⼀个相对不稳
定(如云主机)的环境中,保持⾼可⽤性。
3.数据量很⼤或者未来会变得很⼤
依赖数据库(MySQL)⾃身的特性,完成数据的扩展是较困难的事,在MySQL中,当⼀个单
达表到5-10GB时会出现明显的性能降级,此时需要通过数据的⽔平和垂直拆分、库的拆分
完成扩展,使⽤MySQL通常需要借助驱动层或代理层完成这类需求。⽽MongoDB内建了
多种数据分⽚的特性,可以很好的适应⼤数据量的需求。
4.基于位置的数据查询
MongoDB⽀持⼆维空间索引,因此可以快速及精确的从指定位置获取数据。
5.表结构不明确,且数据在不断变⼤
在⼀些传统RDBMS中,增加⼀个字段会锁住整个数据库/表,或者在执⾏⼀个重负载的请求
时会明显造成其它请求的性能降级。通常发⽣在数据表⼤于1G的时候(当⼤于1TB时更
甚)。 因MongoDB是⽂档型数据库,为⾮结构货的⽂档增加⼀个新字段是很快速的操作,
并且不会影响到已有数据。另外⼀个好处当业务数据发⽣变化时,是将不在需要由DBA修改
表结构
网友评论