• flask+flask_caching+redis缓存


    依赖包如下:

    (venv) C:\Users\fengzi\Desktop\flaskProject3>pip list
    Package                Version
    ---------------------- --------
    arrow                  1.2.0
    cachelib               0.4.1
    cffi                   1.14.6
    click                  8.0.1
    colorama               0.4.4
    cryptography           3.4.7
    Deprecated             1.2.13
    flags                  0.0.1.2
    Flask                  2.0.2
    Flask-Caching          1.10.1
    flask-paginate         0.8.1
    flask-redis            0.4.0
    Flask-Session          0.4.0
    Flask-SQLAlchemy       2.5.1
    greenlet               1.1.1
    importlib-metadata     4.6.4
    itsdangerous           2.0.1
    Jinja2                 3.0.1
    lxml                   4.6.5
    MarkupSafe             2.0.1
    mysql-connector-python 8.0.26
    pamqp                  2.3.0
    pika                   1.2.0
    pip                    21.3
    protobuf               3.17.3
    pycparser              2.20
    PyMySQL                1.0.2
    python-dateutil        2.8.1
    pytils                 0.3
    rabbitpy               2.0.1
    redis                  4.0.2
    setuptools             57.4.0
    six                    1.16.0
    SQLAlchemy             1.4.23
    tools                  0.1.9
    typing-extensions      3.10.0.0
    Werkzeug               2.0.2
    wrapt                  1.13.3
    XMind                  1.2.0
    xmind2testcase         1.5.0
    zipp                   3.5.0

    app.py内容如下:

    import json
    from flask_paginate import Pagination, get_page_parameter, request
    from flask import Flask, render_template
    from flask_sqlalchemy import SQLAlchemy
    from flask_caching import Cache
    import pickle
    from model.UserModel import query
    import json
    config = {
        "DEBUG": True,
        "CACHE_TYPE": "RedisCache",
        "CACHE_DEFAULT_TIMEOUT": 300,
        "CACHE_REDIS_HOST": "xxxxx",
        "CACHE_REDIS_PORT": xxx,
        "CACHE_REDIS_DB": 0,
    }
    app = Flask(__name__)
    
    app.config.from_mapping(config)
    cache = Cache(app)
    
    
    # @cache.cached(timeout=50)
    @app.route('/')
    def hello_world():
        return render_template("index.html")
    
    
    @app.route('/list')
    # @cache.cached(timeout=60)
    def ShowData():
        pageNum = int(request.args.get("pageNum"))
        pageSize = int(request.args.get("pageSize"))
        info = cache.get(f"info{pageNum}")
        if info:
            print("走的redis查询")
            return info
        data_list = query()
        info = {
            "code": 0,
            "message": "OK",
            "total": len(data_list),
            "data": data_list[(pageNum - 1) * pageSize:pageNum * pageSize]
        }
        cache.set(f"info{pageNum}", info)
        print("走的mysql查询")
        return info
    
    @app.route("/addpolicy")
    def AddPolicy():
        return render_template('addpolicy.html')
    
    
    if __name__ == '__main__':
        app.run(debug=True, )

    config.py内容如下

    host = 'xxxxxxxx'
    port = 3306
    username = 'xxx'
    password = 'xxx'
    DB_URI = "mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8".format(username=username,password=password, host=host,port=port, db='testdb')
    SQLALCHEMY_DATABASE_URI = DB_URI
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    SQLALCHEMY_ECHO = True

    UserModel.py内容如下:

    import json
    from sqlalchemy import Column,Integer,String
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import create_engine
    import config
    from sqlalchemy.orm import sessionmaker
    engine = create_engine(config.SQLALCHEMY_DATABASE_URI)
    Base = declarative_base()
    
    class User(Base):
        __tablename__ = 'users'
        id = Column(Integer,primary_key=True,autoincrement=True)
        name = Column(String(32))
        age = Column(Integer)
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def __str__(self):
            info = {
                "id": self.id,
                "name": self.name,
                "age": self.age
            }
            return json.dumps(info)
    
    def query():
        sm = sessionmaker(bind=engine)
        session = sm()
        all = session.query(User).all()
        data_list = []
        for res in all:
            datas = {
                "id": res.id,
                "name": res.name,
                "age": res.age
            }
            data_list.append(datas)
        return data_list

    效果如下:

    在第一次访问网站的时候可以看到走的是mysql关系型数据库,当再次访问的时候走的是redis查询了

     登录到redis服务器查看结果,可以看到,一共6页内容,缓存了6次,有6个key

  • 相关阅读:
    java中获取类资源的不同姿势
    Jdk动态代理与Cglib动态代理
    Spring AOP
    Spring Ioc、DI
    windows 8.1 专业版 visual stuido 2015 安装失败
    win7 共享需要密码问题
    protobuffer .net 序列化
    【转载】SQL Server 2005数据库用户权限管理的设置
    【转载】mongoDB基本使用手册
    【转载】Thread.sleep(0)的意义
  • 原文地址:https://www.cnblogs.com/fengzi7314/p/15693934.html
Copyright © 2020-2023  润新知