Django 用户认证 用户 邮箱登录 邮箱注册 ORM or,and,not form.py FORM ModelForm Paginator 分页 HTMl JQuery 定位元素 ajax django切片 restfulapi 跨域 Ubantu Python Mysql Scrapy 爬虫 导出 Python读写 Pycharm 破解 session re sqlit3 生成式 其他 Prism 富文本 CSS Nginx 部署 请求头 抓包 协议 selenium Ubuntu 宝塔 AI Comfy-ui ollama dify open-webui Git docker
session.flush()与session.clear()的区别及使用环境
张建行 2021年4月15日 01:20 91 文章标签: Django session

首先session是有一级缓存的,目的是为了减少查询数据库的时间,提高效率,一级缓存的生命周期和session是一样的,

session.flush()和session.clear()就针对session的一级缓存的处理。

简单的说,

  1. session.flush()的作用就是将session的缓存中的数据与数据库同步。
  2. session.clear()的作用就是清除session中的缓存数据(不管缓存与数据库的同步)。

详细的说:

网上很多这样的文章,我就不说了,可以看看这篇文章,写的很详细。Session的clear方法和flush方法_LSSSSSS的博客-CSDN博客

我说一下一些需要注意的信息:

  1. session.clear()的作用是只清除session中的缓存数据,但不管缓存与数据库的同步。比如,你执行了
  2. 之后马上执行session.clear(),在事务结束的时候,这条数据是不会被持久化到数据库中的,因为一般缓存是在事务提交的时候进行清理的,当在清理缓存前就把缓存给清除了,自然就不会同步到数据库了。不过这个也有例外的情况,就是当对象使用native生成器来生成主键id时,当执行session.save()方法时,就会立马往数据库插入一条数据,这时候执行session.clear()也不会影响了。
  3. 当更新或者保存大批量数据的时候,可以每固定数量的时候,进行清理缓存,同时清除缓存:
  4. 因为把大量的对象放到session缓存中会浪费大量的内容空间。
  5. 执行完session.flush()时,并不意味着数据就肯定持久化到数据库中的,因为事务控制着数据库,如果事务提交失败了,缓存中的数据还是照样会被回滚的。
for (int i = 0; i < 1000;i ++){
   if (i /20 == 0) {
   session.flush();
   session.clear();
}}
Po po = new Po()
session.save(po)