函数结果缓存多少秒

#-*- coding: utf-8 -*-
import time

global prev_query_time
prev_query_time = None

global_data = dict(
    keyword1 = 1,
    keyword2 = 2,
    keyword3 = 3,
)

global_cache = {}

def cache(number):
    def wrap(func):
        def wrap2(keyword):
            global prev_query_time
            if prev_query_time is None:
                prev_query_time = time.time()
                
            interval_time = time.time() - prev_query_time
            if keyword in global_cache:
                if interval_time>number:
                    prev_query_time = time.time()
                    result =  func(keyword)
                    print(f"{keyword} time out get from db {result}")
                    global_cache[keyword] = result
                    return result
                else:
                    result =  global_cache.get(keyword)
                    print(f"{keyword} get from cache {result}")
                    return result
            else:
                prev_query_time = time.time()
                result =  func(keyword)
                global_cache[keyword] = result
                print(f"{keyword} not in cache get from db {result}")
                return result
        return wrap2
    
    return wrap


def get_data_from_db(keyword):
    #can query from redis,mysql
    result = global_data.get(keyword)
    return result

def get_data_from_cache(keyword):
    result = global_data.get(keyword)
    return result

@cache(5)
def query(keyword):
    result = get_data_from_db(keyword)
    return result

if __name__ == "__main__":
    query("keyword1")
    query("keyword1")
    query("keyword2")
    time.sleep(6)
    query("keyword1")
    

类实现

#-*- coding: utf-8 -*-
import time

global_cache = {}

class Cache(object):
    def __init__(self,number):
        self.number = number
        self.prev_query_time = None
        
    def __call__(self,func):
        def wrap2(keyword):
            if self.prev_query_time is None:
                self.prev_query_time = time.time()
                
            interval_time = time.time() - self.prev_query_time
            if keyword in global_cache:
                if interval_time>self.number:
                    self.prev_query_time = time.time()
                    result =  func(keyword)
                    print(f"{keyword} time out get from db {result}")
                    global_cache[keyword] = result
                    return result
                else:
                    result =  global_cache.get(keyword)
                    print(f"{keyword} get from cache {result}")
                    return result
            else:
                self.prev_query_time = time.time()
                result =  func(keyword)
                global_cache[keyword] = result
                print(f"{keyword} not in cache get from db {result}")
                return result
            
        return wrap2
        
def get_data_from_cache(keyword):
    result = global_data.get(keyword)
    return result

def get_data_from_db(keyword):
    global_data = dict(
        keyword1 = 1,
        keyword2 = 2,
        keyword3 = 3,
    )
    result = global_data.get(keyword)
    return result

@Cache(5)
def query(keyword):
    result = get_data_from_db(keyword)
    return result

if __name__ == "__main__":
    query("keyword1")
    query("keyword1")
    query("keyword2")
    time.sleep(6)
    query("keyword1")
    

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值