学习目标
1.能够使用七牛对象存储服务保存文件
1.先把七牛云sdk代码拷贝
2.封装upload_image
2.能够编写上传用户头像接口
3.能够使用接口管理平台录入接口
4.能够知道CDN的作用
内容分发网络
5.能够知道多级缓存的结构
1.本地
2.redis集群
3.redis主从
6.能够知道可以缓存的数据内容与保存类型
1.string, zset
7.能够知道缓存数据有效期的作用
1.节省空间
2.保证弱一致性
8.能够说明redis的过期策略
1.惰性过期
2.定期过期
9.能够说明redis的内存淘汰策略
LRU LFU
10.能够知道缓存数据更新的方式
1.更新数据库->更新缓存
2.删除缓存->更新数据库(逻辑错误)
3.更新数据库 -> 删除缓存
11.能够说明数据更新后同步更新缓存的并发问题
12.能够说明缓存穿透的问题与解决方式
1.查询数据库不存在的数据
2.没有也添加缓存
13.能够说明缓存雪崩的问题与解决方式
1.同一时间,大量key过期
2.针对每个设置随机的过期时间
14.能够进行redis数据库设计
值,类型,过期时间,淘汰策略
15.能够封装头条项目缓存工具类
用户信息
16.能够在视图中使用封装的缓存工具类
1.上传七牛云工具函数封装
-
文件: d01_qiniu.py
-
用户头像, 文章中的图片等都需要上传, 把它单独封装成一个函数, 方便调用
-
安装:
pip install qiniu
-
封装步骤:
-
1.把官方的demo拷贝到本地.
from qiniu import Auth, put_file, etag import qiniu.config #需要填写你的 Access Key 和 Secret Key access_key = 'Access_Key' secret_key = 'Secret_Key' #构建鉴权对象 q = Auth(access_key, secret_key) #要上传的空间 bucket_name = 'Bucket_Name' #上传后保存的文件名 key = 'my-python-logo.png' #生成上传 Token,可以指定过期时间等 token = q.upload_token(bucket_name, key, 3600) #要上传文件的本地路径 localfile = './sync/bbb.jpg' ret, info = put_file(token, key, localfile) print(info) assert ret['key'] == key assert ret['hash'] == etag(localfile)
-
2.根据需求修改成我们自己的函数。
from qiniu import Auth, put_file, etag, put_data import qiniu.config #需要填写你的 Access Key 和 Secret Key access_key = '51DGWfSzbBws6szT3GVoZ8nMuqVVFAFV2P_StMbr' secret_key = 'pAo3kBotA7PQLCuIF9Y2wCc7AfRs0MEss2-qdTbb' def upload_image(file_data): # 构建鉴权对象 q = Auth(access_key, secret_key) #要上传的空间 bucket_name = 'hmwx02' key = None # 表示文件名由七牛云自己管理 #生成上传 Token,可以指定过期时间等 token = q.upload_token(bucket_name, key, 3600000) # 上传文件数据需要使用put_data函数 ret, info = put_data(token, key, file_data) print(info) if __name__ == '__main__': with open('swk.jpeg', 'rb') as f: upload_image(f.read())
-
备注
1.上传本地图片使用put_file 2.上传图片数据使用put_data 3.生成token, 注意指定过期时间. 由于虚拟机的时间不正确, 所以指定token过期时间久一点, 要么修改服务器的时间.
-
小结
1.一般我们需要用到的第三方的工具, 无论是API还是SDK. 基本上都是上面的两个步骤. 2.一定要培养看文档的习惯.
2.使用date修改时间
- 命令:
sudo date -s '2019-09-26 15:00:00'
3.scp工具
作用: 用于本地和服务器之间, 上传和下载文件
scp属于linux命令,需要在linux系统中使用。
上传:
scp 本地文件 用户名@ip:路径
下载:
scp 用户名@ip:路径/文件 本地路径
4.用户头像上传接口设计
1.PUT: 修改