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) # 这种情况是不会缓存的