• 06.缓存


    第一步:查询redis缓存是否存在这个key
    第二步:如果存在这个key,不用去mysql中查询,直接从redis中取出数据即可(减轻了mysql压力)
    第三步:如果查询的key不存在,先到mysql中查询数据,让后设置到redis中,下次查询就有了

    1.1 2B青年操作

    2B青年每一个需要使用缓存的数据,我都写一个方法获取数据,再写一个方法处理缓存。
    
    若需要用到缓存的地方越来越多,每一个都需要这么写一套代码,代码冗余繁琐。
    
    
    # coding:utf-8
    from django.core.cache import cache
    import time
    
    # 获取readed缓存
    def get_readed_cache():
        # 判断键是否存在
        key = 'readed'
        if cache.has_key(key):
            data = cache.get(key)
        else:
            # 不存在,则通过sql语句获取数据,并写入缓存,这里只是一个举例的sql语句
            data = "select name from tb"
            # 写入缓存
            cache.set(key, data, 3600 - int(time.time() % 3600))
        return data
    
    def test1():
        data = get_readed_cache()
        return data
    
    def test2():
        data = get_readed_cache()
        return data
    
    if __name__ == '__main__':
        test1()
        test2()

    1.2 NB青年

    NB青年可以使用三级装饰器,在装饰器中判断key如果存在就从reids中获取,如果不存在就从数据库查询,并设置到reids中

    # coding:utf-8
    from django.core.cache import cache
    
    # 获取redis缓存的装饰器
    def redis_cache(key, timeout):
        def __redis_cache(func):
            def warpper(*args, **kw):
                if cache.has_key(key):  # 判断缓存是否存在
                    data = cache.get(key)
                else:
                    # 若不存在则执行获取数据的方法
                    # 注意返回数据的类型(字符串,数字,字典,列表均可)
                    data = func(*args, **kw)   # 从数据库查询到数据设置到redis中
                    cache.set(key, data, timeout)
                return data
            return warpper
        return __redis_cache
    
    #键值为test,超时时间为60秒
    @redis_cache('test', 60)
    def get_test_data():
        # 获取Blog模型随机排序前3条数据
        # (Blog模型是我自己的模型,具体代码根据自己需求获取数据)
        # values执行结果,将返回一个字典。字典可以直接存入redis
        # data = Blog.objects.values('id', 'caption').order_by('?')[:3]
        data = '从数据库查询到了数据'
        return data
    
    #键值为test,超时时间为60秒
    @redis_cache('name', 60)
    def get_test_name():
        # 获取Blog模型随机排序前3条数据
        # (Blog模型是我自己的模型,具体代码根据自己需求获取数据)
        # values执行结果,将返回一个字典。字典可以直接存入redis
        # data = Blog.objects.values('id', 'caption').order_by('?')[:3]
        data = '从数据库查询到了数据'
        return data
    
    if __name__ == '__main__':
        get_test_data()
  • 相关阅读:
    dayⅦ:元组、字典的其他操作+集合类型
    dayⅥ:作业
    dayⅥ:字符串操作+列表操作
    dayⅣ:赋值运算+if判断
    dayⅣ:赋值运算+if判断作业
    dayⅢ、基本数据类型+运算符
    爬虫解析bs4
    爬虫请求库之requests库
    爬虫原理
    各主流Linux系统解决方案pip安装mysqlclient报错
  • 原文地址:https://www.cnblogs.com/xiaoxiamiaichiyu/p/14586820.html
Copyright © 2020-2023  润新知