zoukankan      html  css  js  c++  java
  • session.flush()与session.clear()的区别及使用环境

    [From] http://blog.csdn.net/leidengyan/article/details/7514484


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


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


    1 session.flush()的作用就是将session的缓存中的数据与数据库同步。


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




       详细的说:网上很多这样的文章,我就不说了,可以看看这篇文章,写的很详细。http://blog.csdn.net/lssssss/article/details/6839633


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


    1 session.clear()的作用是只清除session中的缓存数据,但不管缓存与数据库的同步。


    比如,你执行了


    Po po = new Po();
    session.save(po),


    之后马上执行session.clear(),在事务结束的时候,这条数据是不会被持久化到数据库中的,因为一般缓存是在事务提交的时候进行清理的,当在清理缓存前就把缓存给清除了,自然就不会同步到数据库了。不过这个也有例外的情况,就是当对象使用native生成器来生成主键id时,当执行session.save()方法时,就会立马往数据库插入一条数据,这时候执行session.clear()也不会影响了。


    2 当更新或者保存大批量数据的时候,可以每固定数量的时候,进行清理缓存,同时清除缓存:


    for (int i = 0; i < 1000;i ++){


    if (i /20 == 0) {


      session.flush();


      session.clear();
    }
    }


    因为把大量的对象放到session缓存中会浪费大量的内容空间。




    3 执行完session.flush()时,并不意味着数据就肯定持久化到数据库中的,因为事务控制着数据库,如果事务提交失败了,缓存中的数据还是照样会被回滚的。
  • 相关阅读:
    Kali Linux下安装配置ProFTPD实例
    mysql 如何用root 登录
    串口总是报'Error opening serial port'
    用SPCOMM 在 Delphi中实现串口通讯 转
    delphi中使用spcomm来实现串口通讯(转载)
    SPCOMM的一些用法注意
    MySQL 字符串 转 int/double CAST与CONVERT 函数的用法
    彻底删除mysql服务
    mysql 非安装版的一个自动安装脚本及工具(更新版)
    bat操作数据库mysql
  • 原文地址:https://www.cnblogs.com/pekkle/p/6568684.html
Copyright © 2011-2022 走看看