django的cache

查询逻辑就是先获取缓存,没有就去获取数据库的数据,写入缓存

from django.core.cache import caches
from django.db.models import Q, F
from django.forms.models import model_to_dict


class DataCache:
    def __init__(self, model, cacheName='default', timeout=60 * 60 * 3):
        self.model = model
        self.cache = caches[cacheName]
        self.timeout = timeout

    def getValue(self, key, keyDbFieldName='key', valueDbFieldName='value'):
        # 强制定制key为字符串
        # key=str(key)
        result = self.cache.get(key)
        if not result:
            getDic = {keyDbFieldName: key}
            qs = self.model.objects.get(**getDic)
            result = model_to_dict(qs)[valueDbFieldName]
            # 修复数据库读取配置转字典bug
            self.cache.set(key, result, self.timeout)
        return result

    def setValue(self, key, value, keyDbFieldName='key', valueDbFieldName='value'):
        try:
            self.model.objects.filter(**{keyDbFieldName: key}).update(**{valueDbFieldName: value})
            result = self.cache.set(key, value, self.timeout)
        except Exception as reason:
            result = {'msg': str(reason)}
        return result

    def deleteKey(self, key):
        return self.cache.delete(str(key))

    def deleteKeysList(self, keysList):
        keysList = [str(x) for x in keysList]
        return self.cache.delete_many(keysList)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

办法总比困难多多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值