Python3 Django框架中如何使用cache缓存代码实例

场景描述

在Django开发中,我们在 views.py 里用到了很多的sql查询,很多的跨表跨库显示,而且数据量已达到百万级,为了加快速度显示,这边启用了缓存。

一开始我们想使用 @cache_page() 来达到缓存的目的,但是这样的缓存没有找到清除缓存的方法。

所以我们只好使用cache的方式来缓存,这里用时间(年-月-日 时:分)md5后作为缓存的key。

而且百度一下以后发现,关于django的cache讲述得很少。我们这里做一下简单的笔记。需要说明一下的是 cache.get_or_set ,我一开始以为是如果有这个值就自动获取,但是发现页面任然很慢。所以查了一下官方手册。 cache.get_or_set 手册里面写的是默认是设置新值。大家使用时一定要防止踩这个坑。

cache.get_or_set(key, default, timeout=DEFAULT_TIMEOUT, version=None)

If you want to get a key’s value or set a value if the key isn’t in the cache, there is the get_or_set() method. It takes the same parameters as get() but the default is set as the new cache value for that key, rather than simply returned:

Python3 Django框架中的缓存机制

views.py 代码实例

from .core.cache import cache
@login_required
def index( request ):
    if request.GET.get('date_joined_0') is None :
        lastDate = SnmpDiff.objects.values('update_time').filter( type = 'computer_room.snmp_95' ).order_by('-id')[1]
        date_joined_0 =  lastDate['update_time'].strftime("%Y-%m-%d")
        date_joined_1 =  lastDate['update_time'].strftime("%H:%M")
    else :
        date_joined_0 = request.GET.get('date_joined_0').replace('/','-')
        date_joined_1 = request.GET.get('date_joined_1')
    date = date_joined_0 + ' ' + date_joined_1
    cache_key = hashlib.md5(('index_'+date).encode(encoding='UTF-8')).hexdigest()
    # result = cache.get_or_set(cache_key, getIndexResult(date),60*60)
    if not cache.get(cache_key) :
        result = cache.get_or_set(cache_key, getIndexResult(date),60*60)
    else:
        result = cache.get(cache_key)

现在除了第一次打开慢一点之外,其他时间打开飞快。

腾讯云云产品双12限时秒杀【点击购买】

搬瓦工,CN2高速线路,1GB带宽,电信联通优化KVM,延迟低,速度快,建站稳定,搬瓦工BandwagonHost VPS优惠码BWH26FXH3HIQ,支持<支付宝> 【点击购买】!

Vultr$3.5日本节点,512M内存/500G流量/1G带宽,电信联通优化,延迟低,速度快【点击购买】!

阿里云香港、新加坡VPS/1核/1G/25G SSD/1T流量/30M带宽/年付¥288【点击购买】

百度云不止一折优惠【点击购买】

发表评论

电子邮件地址不会被公开。 必填项已用*标注