日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

安装redis提示[test] error 2_技术干货分享:一次flask+redis的微服务实战

發布時間:2024/9/27 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 安装redis提示[test] error 2_技术干货分享:一次flask+redis的微服务实战 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先說一下需求的場景,策劃部門想做一個垂直領域的社區產品,類似與知乎那種,但受益人群是金融行業的從業人員。產品中有一個搜索問題的需求,搜索的問題去題庫中進行模糊匹配,終端支持H5/APP/小程序,甚至是微信的自動回復,用過ItChat的人都知道這個強大的工具包,不過最近好像有封號的動作了。做搜索,肯定就會用到分詞,當前開源的分詞庫jieba是做的比較好的了,分析了一下技術棧,就決定用flask來實現一個微服務,供其他的服務模塊使用。

本人會著重講一下環境的搭建,各種配置的坑。

0x01 升級操作系統

操作系統:CentOS 6.x

CentOS 7的玩家手動跳過該環節。首先6.x的版本,默認裝的python的版本是2.6的版本,這個版本后面用到的一些軟件支持的不是很好,所以我們首先要把python升級到2.7的版本。先創建一個update.sh腳本,然后把下面內容復制進去。

#!/usr/bin/env bash #安裝依賴 yum install openssl openssl-devel zlib-devel gcc -y # apt-get install libssl-dev # apt-get install openssl openssl-devel # 下載源碼 wget http://www.python.org/ftp/python/2.7.12/Python-2.7.12.tgz tar -zxvf Python-2.7.12.tgz cd Python-2.7.12 mkdir /usr/local/python2.7.12 # 開啟zlib編譯選項 # sed -i '467c zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz' Module/Setup sed '467s/^#//g' Module/Setup ./configure --prefix=/usr/local/python2.7.12 make make install if [ $? -eq 0 ];then echo "Python2.7.12升級完成" else echo "Python2.7.12升級失敗,查看報錯信息手動安裝" fi cd mv /usr/bin/python /usr/bin/python2.6.6 ln -s /usr/local/python2.7.12/bin/python2.7 /usr/bin/python sed -i '1s/python/python2.6/g' /usr/bin/yum wget --no-check-certificate https://bootstrap.pypa.io/get-pip.py python get-pip.py if [ $? -eq 0 ];then echo "pip升級完成" else echo "pip安裝失敗,查看報錯信息手動安裝" fi rm -rf /usr/bin/pip ln -s /usr/local/python2.7.12/bin/pip2.7 /usr/bin/pip

然后把這個腳本加上可執行的權限,并且運行。

chmod u+x update.sh

./update.sh

0x02 創建python虛擬空間

這一步完成之后,我們就開始隔離一個虛擬的空間來運行這個微服務,以后我們所有的程序都在隔離的虛擬空間中來運行,有點docker的概念,這樣不管是用python2.x還是3.x都可以同時兼容了。

pip install virtualenv

cd /home/test/web

virtualenv ENV

cd bin

source active

至此就啟動了這個docker,接下來就是在這個docker中安裝我們requirement.txt中所需要的包了。

我們用的包有如下:

pip install flask pip install jieba pip install pymysql pip install redis pip install virtualenv pip install uwsgi pip install xlrd

到此為止就可以在ENV的環境中,測試app的功能了,現在python myapp.py試一下各接口功能。

0x03 安裝nginx

盡管測試成功了,但是線上是不能這么運行的,因為flask只是一個web框架,并不是一個web server的容器,flask自帶的werkzeug只能用于開發環境,不能用于生產環境,對于web服務器,我們選擇更專業的uWSGI,并且配合nginx作為反向代理。

首先,我們安裝nginx

yum -y install nginx

默認的nginx的監聽端口是80,如果部署在云服務器上,80端口極大的可能被占用了,我們要去修改這個配置文件。

cd /etc/nginx

vim conf.d

查看一下配置端口的配置文件在哪里,我們看到是default.conf這個文件中有端口號的配置,我們把所有端口號都改成我們想要的端口比如8100。

在 /etc/nginx/ngixn.conf 文件的 http 部分添加一條 include 內容,即最后一行

http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; include /etc/nginx/sites-enabled/*; }

創建配置文件 vim /etc/nginx/sites-enabled/hello.conf

server { # Running port listen 8100; # 服務器ip 或者域名 server_name 0.0.0.0; # Proxying connections to application servers location / { include uwsgi_params; uwsgi_pass 127.0.0.1:5000;//和 uWSGI 配置文件中的 ip端口一致 } }

然后看系統中是否有nginx的service腳本

vim /etc/init.d/nginx

如果沒有該腳本,在該腳本中寫如下內容:

#!/bin/bash # chkconfig: - 85 15 nginx=/usr/sbin/nginx conf=/etc/nginx/nginx.conf case $1 in start) echo -n "Starting Nginx" $nginx -c $conf echo " done" ;; stop) echo -n "Stopping Nginx" $nginx -s stop echo " done" ;; test) $nginx -t -c $conf ;; reload) echo -n "Reloading Nginx" $nginx -s reload echo " done" ;; restart) $0 stop $0 start ;; show) ps -aux|grep nginx ;; *) echo -n "Usage: $0 {start|restart|reload|stop|test|show}" ;; esac

給該文件加上可執行權限

chmod u+x nginx

service nginx start

Nginx 在 /var/log/nginx 目錄下有 access.log 和 error.log 兩個日志文件,如果有問題可以查看這2個日志文件。

0x04 配置uWSGI

接下來配置uWSGI的啟動文件,創建 uwsgi 配置文件

vim /etc/uwsgi/apps-enabled/hello.ini

[uwsgi] // 開啟主線程 master = true // 項目目錄 base = /home/test/web // 移動到項目目錄 cd chdir = %(base) // 本地的ip和端口 socket = 127.0.0.1:5000 // Python 虛擬環境目錄 home = %(base)/ENV // 程序啟動文件 wsgi-file = hello.py // 項目中引用 flask 實例的變量名 callable = app // 處理器數 processes = 2 // 線程數 threads = 4 // 獲取uwsgi統計信息的服務地址 stats = 127.0.0.1:9191

保存配置文件,通過 uwsgi -i /etc/uwsgi/apps-enabled/hello.ini,來啟動 uwsgi。

注意在env的環境下,uwsgi安裝的目錄不會在/usr/bin中,而是在ENV的bin中,所以

在后面的/etc/init.d/uwsgi中的路徑要注意。

創建uWSGI的日志文件

vim /var/log/uwsgi/hello.log

創建uWSGI的service文件

vim /etc/init.d/uwsgi

#!/bin/bash # chkconfig: - 85 15 uwsgi=/home/test/web/ENV/bin/uwsgi hello_conf=/etc/uwsgi/apps-enabled/hello.ini case $1 in start) echo -n "Starting uWsgi" nohup $uwsgi -i $hello_conf >/var/log/uwsgi/hello.log 2>&1 & echo " done" ;; stop) echo -n "Stopping uWsgi" killall -9 uwsgi echo " done" ;; restart) $0 stop $0 start ;; show) ps -ef|grep uwsgi ;; *) echo -n "Usage: $0 {start|restart|stop|show}" ;; esac

添加可執行屬性

sudo chmod +x /etc/init.d/uwsgi

service uwsgi start

uWSGI 在 /var/log/uwsgi 目錄下有項目對應日志,有問題可以查看。

0x05 redis的安裝

首先安裝redis的編譯工具gcc和gcc-c++

yum install gcc gcc-c++

然后從redis的官網上下載redis并且安裝

wget http://download.redis.io/releases/redis-3.2.5.tar.gz tar -zxvf /soft/redis-3.2.5.tar.gz cd redis-3.2.5 make & make install

然后配置redis.conf

bind 0.0.0.0

# 3.x版本,將此屬性關閉

protected-mode no

添加redis的service服務

vim /etc/init.d/redis

#!/bin/sh # # Simple Redis init.d script conceived to work on Linux systems # as it does use of the /proc filesystem. REDISPORT=6379 EXEC=/usr/local/bin/redis-server CLIEXEC=/usr/local/bin/redis-cli PIDFILE=/var/run/redis_${REDISPORT}.pid CONF="/etc/redis/${REDISPORT}.conf" case "$1" in start) if [ -f $PIDFILE ] then echo "$PIDFILE exists, process is already running or crashed" else echo "Starting Redis server..." $EXEC $CONF fi ;; stop) if [ ! -f $PIDFILE ] then echo "$PIDFILE does not exist, process is not running" else PID=$(cat $PIDFILE) echo "Stopping ..." $CLIEXEC -p $REDISPORT shutdown while [ -x /proc/${PID} ] do echo "Waiting for Redis to shutdown ..." sleep 1 done echo "Redis stopped" fi ;; *) echo "Please use start or stop as first argument" ;; esac

然后啟動服務

chmod u+x redis

service redis start

0x06 python中引入redis作為緩存

我們知道redis是k-v的數據緩存機制,當緩存數據為string, 或是hash類型的時候,都有原生的函數支持,具體可以參考redis的API文檔。

但是當我們緩存我們自定義的實體類的時候,有點力不從心,這時候可以用pickle庫來做序列化,先把實體類轉換成string類型存儲在redis中,取出的時候,再做反序列化的操作,具體代碼如下:

#coding=utf-8 import redis import pickle class Redis: @staticmethod def connect(host='localhost', port=6379, db=0): r = redis.StrictRedis(host, port, db) return r # 將內存數據二進制通過序列號轉為文本流,再存入redis @staticmethod def set_data(r, key, data, ex=None): r.set(pickle.dumps(key), pickle.dumps(data), ex) # 將文本流從redis中讀取并反序列化,返回 @staticmethod def get_data(r, key): data = r.get(pickle.dumps(key)) if data is None: return None return pickle.loads(data)

0x07 總結

到此為止,一個flask的app的部署就基本完成了,中間的環節比較瑣碎,但互聯網上的資料也很多,基本都可以解決,祝大家玩的開心!

總結

以上是生活随笔為你收集整理的安装redis提示[test] error 2_技术干货分享:一次flask+redis的微服务实战的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。