flask:访问redis

一,安装第三方库

$ pip3 install Flask-Caching redis

二,代码:

初始化cache

 

import os
from dotenv import load_dotenv

from flask import Flask,jsonify

from flask_sqlalchemy import SQLAlchemy

from helpers.utils import failed_response

from flask_caching import Cache

# 加载变量
dotenv_path = os.path.join(os.path.dirname(__file__), '.env')
load_dotenv(dotenv_path=dotenv_path, verbose=True, override=True)
db_uri = os.getenv("SQLALCHEMY_DATABASE_URI")
print("打印配置项:")
print(db_uri)

app = Flask(__name__)

# 数据库信息
host = '127.0.0.1'
port = '3306'
database = 'mybase'
username = 'root'
password = 'rootpassword'

# 数据库类型+连接数据库的插件,这里使用的pymysql
DB_URI = f'mysql+pymysql://{username}:{password}@{host}:{port}/{database}'
# 配置数据库连接
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI

# cache的配置
app.config['CACHE_TYPE'] = "redis"
app.config['CACHE_DEFAULT_TIMEOUT'] = 300
app.config['CACHE_REDIS_HOST'] = '127.0.0.1'
app.config['CACHE_REDIS_PASSWORD'] = ''
app.config['CACHE_REDIS_PORT'] = 6379
app.config['CACHE_REDIS_DB'] = 0
app.config['CACHE_KEY_PREFIX'] = ''

# db绑定Flask对象
db = SQLAlchemy()
db.init_app(app)

# 缓存
cache = Cache(app)

from controller.admin import admin
from controller.user import user

app.register_blueprint(admin,url_prefix="/admin")
app.register_blueprint(user,url_prefix="/user")

import logging
from logging.handlers import RotatingFileHandler
import traceback


file_handler = RotatingFileHandler("app_error.log")
file_handler.setLevel(logging.INFO)
file_handler.setFormatter(logging.Formatter(
    '%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]'))
app.logger.addHandler(file_handler)
app.logger.setLevel(logging.DEBUG)

@app.errorhandler(404)
def page_not_found(error):
    data = {
        "status": "failed",
        "code": 500,
        "msg": "错误的路径"
    }
    return jsonify(data), 404


@app.errorhandler(Exception)
def handle_exception(error):
    stack = traceback.format_exc()
    app.logger.error(f"An error occurred: {str(error)}")
    app.logger.error(stack)
    # return "An internal error occurred.", 500
    return failed_response(500,"An internal error occurred."), 500


if __name__ == '__main__':
    app.run(debug=True)

调用

@user.route("/list/")
@cache.cached(timeout=60)
def user_list():
    meta = {
        "title": "用户列表",
        "code": 200,
        "msg": ""
    }

    # 得到数据库中的数据
    users = User.query.all()

    for index, user in enumerate(users):
        if user.id == 2:
            users[index].city = "沈阳市"

    return success_response([user.to_json() for user in users])

 

三,测试效果 

从redis查看缓存数据:

27.0.0.1:6379> get "view//user/list/"
"!\x80\x05\x95\xf4\x01\x00\x00\x00\x00\x00\x00\x8c\x0eflask.wrappers\x94\x8c\bResponse\x94\x93\x94)\x81\x94}\x94(\x8c\aheaders\x94\x8c\x1fwerkzeug.datastructures.headers\x94\x8c\aHeaders\x94\x93\x94)\x81\x94}\x94\x8c\x05_list\x94]\x94(\x8c\x0cContent-Type\x94\x8c\x10application/json\x94\x86\x94\x8c\x0eContent-Length\x94\x8c\x03236\x94\x86\x94esb\x8c\a_status\x94\x8c\x06200 OK\x94\x8c\x0c_status_code\x94K\xc8\x8c\x12direct_passthrough\x94\x89\x8c\t_on_close\x94]\x94\x8c\bresponse\x94]\x94C\xec
{\"code\":200,\"data\":[{\"age\":44,\"city\":\"\\u94c1\\u5cad\",\"id\":1,\"nickname\":\"\\u8c22\\u5e7f\\u5764\",\"username\":\"guangkun\"},{\"age\":35,\"city\":\"\\u6c88\\u9633\\u5e02\",\"id\":2,\"nickname\":\"\\u8d75\\u56db\",\"username\":\"zhaosi\"}],\"msg\":\"\",\"status\":\"success\"}\n\x94aub."

 

posted @ 2025-11-09 12:42  刘宏缔的架构森林  阅读(20)  评论(0)    收藏  举报