关于装饰器实现静态资源redis持久化


(声明:本教程仅供本人学习使用,如有人使用该技术触犯法律与本人无关)
(如果有错误,还希望指出。共同进步)


project 配置

# app资源前缀
class AppResourcesUrlConfig:
    # app图片资源前缀
    resources_url = "http://************/"
    # 是否开启缓存
    OPEN_CACHE = True

redis 配置页 |||| django settings 中配置的补充

import redis


# redis配置
def return_redis_cli(_config):
    redis_cli = redis.StrictRedis(**_config)
    return redis_cli


# app资源配置读取
def app_resource_redis():
    _config = dict(host="127.0.0.1", port=6379, db=15, decode_responses=True)
    return return_redis_cli(_config)



装饰器实现


import json
from utils_platform.redis_connection import app_resource_redis
from utils_platform.redqueen.resources_configs import AppResourcesUrlConfig


# 设置静态资源缓存
def cache_queryset(timeout, params='app_resource'):
    def wrapper(func):
        def inner(*args, **kwargs):
            if not AppResourcesUrlConfig.OPEN_CACHE:
                return func(*args, **kwargs)

            key = "{}_{}".format(params, func.__name__)
            cache = app_resource_redis()
            qs = cache.get(key)
            if qs is None:
                qs = func(*args, **kwargs)
                cache.set(key, json.dumps(qs), timeout)
                return qs
            return json.loads(qs)
        return inner
    return wrapper

示例


# import os
# # import sys
# import django
# os.chdir("../../")
# # sys.path.append('.')
# os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'matrix.local_settings')
# django.setup()

from matrix.settings import TEST_ENV
from resource_management.models import Product
from utils_platform.decorators import cache_queryset


ADD_BOX_LIST = [261, 262, 263] if TEST_ENV else [164, 163, 162]      # 小礼盒/大礼盒/豪华礼盒
ADD_PRODUCT_CATEGORY = {
    4: "箱子(free)"
}


# 加载所有礼物信息,{id: {title, category, }}
@cache_queryset(1800, params='product_all')
def load_product_message():
    products = Product.objects.all()
    return {
        product.id: {
            "title": product.title,
            "category": product.category,
            "icon": product.icon,
            "grade": product.grade
        }
        for product in products}

# if __name__ == '__main__':
#     print(load_product_message())


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值