这里还是要推荐下小编的Python学习群: 823137423,不管你是小白还是大牛,小编我都欢迎
,不定期分享干货,包括小编自己整理的一份2019年最新的Python资料和0基础入门教程视频,欢迎初学和进阶中的小伙伴。在不忙的时间我会给大家解惑。
docker部署python程序清空redis数据
线上服务器没有独立的python环境,也没有外网可以装包,因此我们大都采用docker部署服务和脚本。
这样好处是:
- 不同的应用之间环境和包不同,互相隔离
- 方便移植,上传镜像文件其他机器直接下载部署
清空redis数据需求
web api采用了redis作为缓存,默认缓存时间为1天(从发起请求开始),集群数据每天6天更新到mysql,考虑到如果是晚上发起的请求,凌晨6点后的api返回的数据依然是缓存数据没有更新,因此采用这种方式去更新,在集群数据写入mysql以后,执行此任务,清空redis里的缓存数据保证数据为最新
依赖环境
python版本3.5.2(从docker下载python镜像)
依赖包
redis==2.10.6
Click==7.0
Cython==0.29.2
项目目录
| RefreshRedis ├── refresh . py 清空程序 ├── config . json 数据库配置文件 ├── Dockerfile 创建 docker 镜像文件(文件名不可变) ├── requirements . txt 需要安装的包
refresh.py 清空redis数据脚本
#coding:utf-8 import os , json , redis import click class BwRedisHandler ( object ): def __init__ ( self , redis_config ): self . redis_config = redis_config self . pool = redis . ConnectionPool (** self . redis_config ) self . r = redis . StrictRedis ( connection_pool = self . pool ) def delele ( self , key ): self . r . delete ( key ) return True @property def keys ( self , delete_prefixion = 'Cloud:get' ): return [ k for k in self . r . keys () if k . startswith ( delete_prefixion )] if self . r . keys () else [] def rm_keys ( self ): n = 0 if self . keys : for key in self . keys : self . delele ( key ) n += 1 print ( '成功删除{}条数据 {}' . format ( n , ',' . join ( self . keys ))) @click . command () @click . option ( '--mode' , help = 'local/test/prd' ) def main ( mode ): BASE_DIR = os . path . dirname ( os . path . abspath ( __file__ )) CONFIG_FILE = os . path . join ( BASE_DIR , 'config.json' ) with open ( CONFIG_FILE , 'r' , encoding = 'utf-8' ) as fr : config = json . load ( fr ) CONFIG = config [ mode ] redis = BwRedisHandler ( CONFIG [ 'redis' ]) redis . rm_keys () if __name__ == '__main__' : main ()
Dockerfile
#依赖的镜像 FROM python : 3.5 . 2 #开发者信息 MAINTAINER chengxinyao < chengxinyao1991@163 . com > #镜像描述及版本号 LABEL Description = "RefreshRedis" Vendor = "Bwang" Version = "0.0.1" #拷贝文件 COPY . / src / # 执行命令 RUN pip install - i https : //pypi.douban.com/simple -I wheel setuptools RUN pip install - r / src / requirements . txt - i https : //pypi.douban.com/simple #指定路径 WORKDIR / src / #命令行 CMD [ "python" , "/src/refresh.py" , "--mode" , "test" ]
依据Dockerfile创建本地镜像
#需进入到Dockerfile所在目录 ## docker build -t 镜像名(小写):版本号 .(小数点是指定镜像构建过程中的上下文环境的目录) docker build - t refreshredis : 0.0 . 1 .
创建镜像过程
Sending build context to Docker daemon 6.656kB Step 1 / 8 : FROM python : 3.5 . 2 ---> 432d0c6d4d9a Step 2 / 8 : MAINTAINER chengxinyao < chengxinyao@baiwang . com > 省略 Successfully built 85b2bb03caf7 Successfully tagged refreshredis : 0.0 . 1 出现 Successfully tagged 镜像名:版本号 即成功
查看镜像
docker images
屏幕显示如下
REPOSITORY TAG IMAGE ID CREATED SIZE refreshredis 0.0 . 1 自动生成的 image_id 你的创建时间 705MB
保存镜像为压缩文件 refreshredis.tar.gz
docker save refreshredis : 0.0 . 1 | gzip > refreshredis . tar . gz
上传压缩文件到服务器
scp refreshredis . tar . gz root@ 服务器:目录
登录到服务器去下载镜像
docker load - i refreshredis . tar . gz
服务器上查看镜像
docker images
服务器上依据该镜像执行python脚本清空redis
docker run - it -- rm refreshredis : 0.0 . 1 python / src / refresh . py -- mode test