celery异步消息处理框架
Fastdfs 分布式文件存储系统, 主要用来存储单个较小的文件
如何将cookie中的数据合并到redis中:
cookie中只能保存字符串数据, 所以要将购物车数据使用pickie模块dumps序列化转换(装换成二进制字节类型), 然后使用base64编码为字符串, 保存到cookie中
蓝图: 模块化应用, 用来使各个功能模块之间相互解耦
单例:
- new方法:
Class A(objects):
__isinstances = None
Def __new__(cls,*args,**kwargs):
If cls.__isinstances == None:
cls.__isinstances = objects.__new__(cls)
Return cls.__isinstances
- 装饰器用法:
def func1():
__isintances= {}
Def func2(*args,**kwargs):
If cls not in __isinstances:
__isintances[cls] = cls(*args,**kwargs)
Return __isintances[cls]
Reutrn func2
@func1
Class B(objects):
A = 1
Def __init__(self,x=0):
Self.x = x
数据库隔离级别:
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
读未提交(read-uncommitted) | 会发生 | 会发生 | 会发生 |
不可重复读(read-committed) | 避免 | 会发生 | 会发生 |
可重复读(repeatable-read) | 避免 | 避免 | 会发生 |
串行化(serializable) | 避免 | 避免 | 避免 |
串行化, 可重复读, 读已提交, 读未提交
脏读: 就是指A操作数据库,读取数据默认为0,更改数据+1操作,同时B查询数据库结果为1,
事务(对于数据库的crud操作)的acid四大特性:
原子性: 要么执行要么不执行
一致性: 要么成功要么失败
隔离性: 多个事务之间互不影响
持久性: 数据一旦提交更改, 数据将会持久存储
乐观锁机制: 在表中定义一个字段表示version版本号, 在用户下订单(支付)过程中, 先执行查询数据库库存操作, 同时将version号数据读出, 当用户对数据更改后, version自增一, 同时将更改commit数据库更新, 判断版本号 大于原始版本号, 偌大, commit成功.
多线程应用场景: celery,中间件(消息队列), 执程(worker)可以实现分布式部署,只要将worker监听消息队列就行.
Tcp/udp:
Tcp 面向连接的可靠传输层协议: 传输数据时需要与对方三次握手建立连接,四次挥手断开连接:传输任务期间, 存在超时重传机制,校验确认机制, 对于系统资源要求较多,连接只能是点对点,注重的是传输质量
- 创建socket()对象
- 绑定服务器ip,port
- 开启listen监听
- accept接受连接
- 收发数据
- 关闭连接
Udp 面向无连接的不可靠传输协议, 无需三次握手四次挥手, 没有确认等机制,只管传数据, 不管你收没收到, 支持一对多, 多对一的场景,注重传输速率.
- 创建socket对象
- 绑定ip,port信息
- 收发数据
- 关闭连接
Ip 网络层传输协议, 进行计算机网络连接进行通信的协议, 不同计算机之间相互通信的一套规则, 把数据统一转换成数据包的格式, 实现传递, ip地址是用来区分因特网中的每台计算机的.
Http 应用层传输协议:
多进程: 进程之间内存数据相互独立, 互不共享, 由系统分配资源的基本单位,
实现数据共享可以通过manager管理器对象,value和array方法将数据共享, 进程间通信可以通过管道或者队列实现(p.put)上传,p.get下载
多线程: 共享进程中的数据, 会对全局数据更改, 需要加锁threading.lock方法给任务加锁
cpu调度的基本单位, 基本不占用资源
线程切换需要先将当前执行状态保存一遍, 然后才进行切换, 涉及到寄存器,栈的操作
协程: 有我们自己来操控, 可以通过monkey_pathall()方法来监听阻塞操作,存在于线程当中所以无需进行栈的切换,效率更高
Git 命令:
Git clone 克隆到本地
Git pull(下拉合并到本地)
Git add(添加到工作区)
Git cpmmit(提交到本地仓库)
Git push(提交至远程仓库)
Git bransh -a列出远程仓库的分支
Git checkout 切换分支
Git merage 合并分支
docker容器: 就是一个执行环境
Docker connteiner
Docker exec -it 容器名 进入正在运行的容器
Linux 命令:
Tar zcvf 打包
Tar zxvf 解包
Free 查看内存
Top cup使用率
Netstat -anp | grep 80监听端口号
Ps 查看进程
四剑客:
find 路径 "匹配方式"/-size 2查找文件
Grep 满足条件的文件内容
Awk 精确查找, 对文本内容过滤匹配
Sed 非交互式文本编辑(-i)彻底更改
迭代器: 如果一个对象它的类实现了iter和next方法, 那么他就是一个迭代器
生成器: 如果一个函数里面有yeild关键字, 特殊的迭代器, 保存当前程序执行状态, 节省能存, 返回是个对象, 可以通过next方法 取值
文件处理: with open()as f:
装饰器: 为原有的函数增加新的功能, 就是一个闭包函数, 函数嵌套, 外层函数返回内层函数对象.
日志:
授权: 用户访问当前网页是否被授权:
Def func(f)
面向对象: 相对于面向过程而言
fastdfs分布式文件存储系统:
调度服务器, 存储服务器
存储服务器定时上传状态信息给调度服务器, 当用户需要上传文件时, 调度服务器调用可用的存储服务器, 将存储服务器的ip, port返回给客户端, 客户端直接访问存储服务器实现上传, 上传完成后存储服务器返回给客户端文件名,路径等信息.
Es 基于lucenne引擎的应用框架, hastack对接安装了es的服务器, 使用时向es服务器发请求.
原理: 查询时, es自己会将数据库中的数据预处理一边, 建立一份索引, 如果在es中查到数据, 然后再通过索引去数据库查询数据. 减少了用户对数据库的直接全局查询操作, 减轻了数据库服务器压力, 提高了查询效率.
Redis 基于key-value型的内存型数据库, 读写效率高, 在未启动服务器的时候将数据持久化存储到硬盘当中, 启动后将数据加载到内存当中.
单线程操作, 性能受cpu影响
应用于对于数据处理业务复杂, 安全性较高的系统
Mongodb 大容量存储, 吃内存, 支持索引, 不支持事务
应用于大容量数据访问效率问题
Memcached: 多读少写, 查询用户信息, 好友信息, 图书信息
Map filter reduce
Map: 传入两个参数, 第一个参数是一个函数, 第二个参数是一个序列
将参数二中的每个元素执行一个第一个函数
Filter …
将参数二中满足函数的元素输出
Reduce:
将序列中的元素按照函数进行累计运算
Python3中reduce被分配到function 模块当中,
v
django第三方扩展包:
Django.contrinble.auth 权限认证, 接收request对象authenticate接收两个参数: 用户名和密码, 校验完成返回user对象
django_rest_framework.views 视图类 封装了http请求方法
Django_http request请求参数 获取cookie request.cookie.get()
response响应对象(状态码, context响应内容)response.set_cookie()
权限认证, authenticate()校验用户名密码是否正确
admin后台管理
表单 form data ,可以通过request.post来获取
缓存: cache
: 自带orm------ crud操作通过模型类名.objects.过滤器实现数据库查询
通过模型类名.create()创建资源
通过模型类名.save()修改数据
所以他是一个重量级框架, 作用是在快速开发
Flask 通过flask_sqlalchemy第三方扩展,来操作数据库
通过db.session数据库会话增删改数据
通过模型类名.query对象查询数据库
查询集:
惰性执行: 创建查询集并不会马上查询数据库, 只有当程序执行, 访问数据的时候才会发起查询操作
缓存: 当首次查询的时候会将数据缓存到查询对象中, 再次查询的时候会使用之前查询的数据.
只是一个框架, 大量的功能,需要自己去找扩展包, 自己实现
为避免在每个视图函数中使用重复的代码, flask提供了注册函数功能, 可以在视图函数请求前或之后调用
请求勾子: 客户端和服务器交互过程中, 需要一些准备工作, 或者扫尾工作
Before_first_request 在处理第一个请求前执行
Before_request 每次请求前执行
After_request 如果没有错误, 每次请求后执行, 接受请求构造响应
Teardown_request 每次请求后执行, 接收错误信息参数, 如果有相关错误抛出
python是一门面向对象动态解释型编程语言
面向对象: 相对于面向过程而言, 在python一切皆对象, 一个具体的事务就是一个对象
动态: 在定义变量时, 无需声明它的类型, python自己识别, 当然你也可以自定义
解释性语言: 在程序执行时才会被翻译成机器语言(二进制语言)
Es 基于lucen的一个搜索引擎, 对数据库中的需要查询的字段给予处理一遍建立一份索引. 查询的时候先通过hastack扩展包向es服务器发起请求, 查找某个关键字在数据库中的索引, 然后再去查询数据库.
项目中1:install_apps添加 haystack, 2. 配置服务器地址, 3; 创建索引类4. 生成索引 5, 创建视图:定义路由
在python项目中通过hastack一个接口对接es服务器, 将es部署在docker容器中, 使用的时候通过向es服务器发起请求, 查找商品,
字符串的常见操作:
1:
注册登录过程实现:
注册: 获取验证码图片和内容, 图片, 验证码内容是前端生成的, 我们首先要将这两者保存到redis中, 通过校验用户输入的手机号, 图片验证码内容, 来获取短信验证码. (短信验证码是后端服务器生成, 通过第三方平台给用户发过去), 校验用户手机号, 密码, 短信验证码完成注册.
登录: