Flask项目(5)

该博客介绍了Flask项目中关于用户头像上传的实现,包括上传七牛云的工具函数封装、接口设计与编写。同时,文章详细探讨了缓存的概念、架构、在头条项目中的应用,以及缓存更新、淘汰策略和问题解决方案,如缓存穿透、雪崩等。还展示了用户信息和关注缓存的数据设计与实现。
摘要由CSDN通过智能技术生成

学习目标

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: 修改
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值