docker部署python程序清空redis数据

docker部署python程序清空redis数据

这里还是要推荐下小编的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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值