Django QuerySet缓存和惰性机制

惰性机制:

    在内部。QuerySet在构造,过滤,切片,传递的时候通常查询集不会真正的去数据库查询

       那它会在什么情况下去数据库查询呢?

                1.迭代(通过循环将值一个个拿出来)

                2.切片,使用切片语法的step(步长切片)参数,或者是切片只切出一个元素的时候,Django将执行数据库查询,

                3.直接在控制台打印的时候

                4.使用len()方法获取长度的时候,底层调用count

                5.使用list()方法转换类型

                6.通过if,else去判断是否为空的时候

                7. 序列化缓存,把查询集的内容存在reis或者内存中

     解释完惰性机制,在来说说缓存,只要重复利用好这个特性,将会提高代码的质量

           1.会在什么时候缓存呢?

                    在只执行一个QuerySet的时候,将会将查询结果缓存在这个对象,后面再查询这个QuerySet,会从缓存中获取,而不去数据库

                    值得注意的是,在新创建的QuerySet的缓存中,缓存是空的

users = User.objects.all()
for item in users:
    print(item.mobile) 

users.mobile

    2.什么时候不缓存

                a.使用数组切片或者索引不会缓存

                b.简单的打印不缓存   

users = User.objects.all()
print(users[0].mobile) # 这种情况是不会缓存的
posted @ 2020-01-18 10:42  desds  阅读(397)  评论(0编辑  收藏  举报