二级缓存

Hibernate的缓存(收集)

妖精的绣舞 提交于 2020-02-16 05:49:12
(1)缓存就是把以前从数据库中查询出来和使用过的对象保存在内存中(一个数据结构中),这个数据结构通常是或类似Hashmap,当以后要使用某个对象 时,先查询缓存中是否有这个对象,如果有则使用缓存中的对象,如果没有则去查询数据库,并将查询出来的对象保存在缓存中,以便下次使用。 2)Hibernate的Session就是一种缓存,我们通常将之称为Hibernate的一级缓存,当想使用session从数据库中查询出一个对象 时,Session也是先从自己内部查看是否存在这个对象,存在则直接返回,不存在才去访问数据库,并将查询的结果保存在自己内部。由于Session代 表一次会话过程,一个Session与一个数据库连接相关连,所以Session最好不要长时间保持打开,通常仅用于一个事务当中,在事务结束时就应关 闭。并且Session是线程不安全的,被多个线程共享时容易出现问题。通常只有那种全局意义上的缓存才是真正的缓存应用,才有较大的缓存价值,因 此,Hibernate的Session这一级缓存的缓存作用并不明显,应用价值不大。Hibernate的二级缓存就是要为Hibernate配置一种 全局缓存,让多个线程和多个事务都可以共享这个缓存。我们希望的是一个人使用过,其他人也可以使用,session没有这种效果。 (3)二级缓存是独立于Hibernate的软件部件,属于第三方的产品

9.Mybatis缓存

£可爱£侵袭症+ 提交于 2020-02-13 01:46:38
转载:https://blog.kuangstudy.com/index.php/archives/508/ 一.缓存 1.简介 什么是缓存 [ Cache ]? 存在内存中的临时数据。 将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。 为什么使用缓存? 减少和数据库的交互次数,减少系统开销,提高系统效率。 什么样的数据能使用缓存? 经常查询并且不经常改变的数据 2.Mybatis缓存 MyBatis包含一个非常强大的查询缓存特性,它可以非常方便地定制和配置缓存。缓存可以极大的提升查询效率。 MyBatis系统中默认定义了两级缓存: 一级缓存 和 二级缓存 默认情况下,只有一级缓存开启。(SqlSession级别的缓存,也称为本地缓存) 二级缓存需要手动开启和配置,他是基于namespace级别的缓存。 为了提高扩展性,MyBatis定义了缓存接口Cache。我们可以通过实现Cache接口来自定义二级缓存 3.一级缓存 一级缓存也叫本地缓存: 与数据库同一次会话期间查询到的数据会放在本地缓存中。 以后如果需要获取相同的数据,直接从缓存中拿,没必须再去查询数据库; (1)搭建项目mybatis_cache UserMapper.java接口: 1 //根据ID查询用户 2

MyBatis-复习篇

南笙酒味 提交于 2020-02-12 11:31:36
1.Mybatis工作流程 2.封装方法 3.采用映射方法实现接口查询 4.接口配置文件 讲述增删改查(源代码) (1)模糊查询的方法 (2)Mapper生命周期 5.pojo实体类中的字段和数据库中的字段不一样 (1)换一个别名 (2)、使用返回类型 resultMap 6.Mybatis分页查询 (1).通过UserMapper.xml配置来实现 UserMapper.xml配置: 测试类: (2).通过Java代码实现分页 (不建议使用,但是快) (3)分页可以使用其他方法 7.按照查询嵌套处理(多对一复杂查询) (1).通过子查询来完成 (2).按照结果嵌套查询--联表查询 8.类似于联表查询 一对多 联表查询 小结 提取SQL片段: 引用SQL片段: 测试 如下 10.二级缓存 注意:采用了二级缓存会出现序列化的问题 缓存工作流程图 结论 1.Mybatis工作流程 2.封装方法 SqlSessionFactoryUtils 里面的openSession 3.采用映射方法实现接口查询 UserMapper userMapper =session.getMapper(UserMapper.class); List<User> userList =userMapper.getList(); 4.接口配置文件 讲述增删改查(源代码) (1)模糊查询的方法 (2

127.Hibernate二级缓存

…衆ロ難τιáo~ 提交于 2020-02-08 17:52:41
在项目中,有些数据几乎不会改变,作为共享数据来使用的时候,它们就是二级缓存。 Hibernate 并没有提供二级缓存的解决方案。但是市面上有解决二级缓存的第三方组件,如:EhCache、OsCache、JbossCache、MomeryCache等。 特性: 1.修改不能特别频繁。 2. 数据可以公开。 二级缓存在SessionFactory中,因为SessionFactory是线程安全的,所以二级缓存也是线程安全的。 二级缓存的生活周期和SessionFactory一样。 怎么样把数据放入二级缓存? 怎么样把数据从二级缓存中提取出来? Hibernate 默认二级缓存是关闭的。所以需要在 1.hibernate.cfg.xml 中配置二级缓存。 5.0 这么配置不对 在Mapping文件中配置。 注意<cache>的位置必须在<id>之前 session.get 方法的作用 :1.把一个对象变成持久化状态的对象。2.把该对象存放到session的一级缓存中。3.把该对象存入sessionFactory的二级缓存中。 session.clear 方法清除一级和二级缓存。 session.save 方法特殊,它只放入一级缓存,不放入二级缓存。 session.flush 会把数据放入二级缓存中。 session.get 、session.load、session

Mybatis缓存

佐手、 提交于 2020-02-07 00:39:01
Mybatis一级、二级缓存 一级缓存: 同一个SqlSession对象 SqlSession sqlSession = SqlSessionFactoryUtils.openSqlSession(); RoleMapper roleMapper = sqlession.getMapper(RoleMapper.class); Role role = roleMapper.getRole(1); Role role2 = roleMapper.getRole(1); 第二次访问时,不再查询数据库,直接从sqlSession中取值。 如果执行 sqlSession.commmit() 则清理,一级缓存 二级缓存: Mybatis自带二级缓存,同一个namespace生成的mapper对象, namespace的值就是接口的全类名,通过接口可以产生代理对象(studentMapper对象) StudentMapper studentMapper = session.getMapper(StudentMapper.class); 如果是同一个接口,则是二级缓存 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(); SqlSession sqlSession = new

谈谈个人网站的建立(八)—— 缓存的使用

淺唱寂寞╮ 提交于 2020-02-05 03:09:57
欢迎访问我的网站 http://www.wenzhihuai.com/ 。感谢,如果可以,希望能在GitHub上给个star,GitHub地址 https://github.com/Zephery/newblog 。 一、概述  1.1 缓存介绍 系统的性能指标一般包括响应时间、延迟时间、吞吐量,并发用户数和资源利用率等。在应用运行过程中,我们有可能在一次数据库会话中,执行多次查询条件完全相同的SQL,MyBatis提供了一级缓存的方案优化这部分场景,如果是相同的SQL语句,会优先命中一级缓存,避免直接对数据库进行查询,提高性能。 缓存常用语: 数据不一致性、缓存更新机制、缓存可用性、缓存服务降级、缓存预热、缓存穿透 可查看 Redis实战(一) 使用缓存合理性 1.2 本站缓存架构 从没有使用缓存,到使用mybatis缓存,然后使用了ehcache,再然后是mybatis+redis缓存。 步骤: (1)用户发送一个请求到nginx,nginx对请求进行分发。 (2)请求进入controller,service,service中查询缓存,如果命中,则直接返回结果,否则去调用mybatis。 (3)mybatis的缓存调用步骤:二级缓存->一级缓存->直接查询数据库。 (4)查询数据库的时候,mysql作了主主备份。 二、Mybatis缓存 2.1 mybatis一级缓存

mybatis面试题

让人想犯罪 __ 提交于 2020-02-04 14:32:32
1.对mybatis的理解,优点和缺点 mybatis是一个持久层的开源框架,对JDBC进行了封装,是一个不完全的orm映射,通过xml进行sql语句的统一管理 优点: 1.基于sql语句,把sql语句在xml里统一管理,解耦 2.因为用JDBC连接,所以可以与数据库更好的兼容 3.能够与spring有很好的集成 缺点: sql语句工作量大 数据库移植性差 映射的什么不映射的什么? 只对输入输出映射,不对sql映射 2.什么项目建议使用mybatis? 因为mybatis注重sql语句是一个灵活的dao层解决方案,所以对需求变化特别大的,性能要求高的,如互联网项目,是一个不错的选择 3.#{}和${}区别 1.#{}相当于占位符,就是原始JDBC中的? 2. KaTeX parse error: Expected 'EOF', got '#' at position 30: … 3.当传入的值是基本类型时,#̲{}中可以随便写,但 {}中要写value,当是对象类型时,都要和对象的属性名对应 4.mapper代理开发 1.mapper映射文件要和mapper接口同名最好同包 2.mapper映射文件的命名空间(namespace)要是对应的mapper接口的全路径名 3.mapper映射文件中标签的输入参数要和mapper接口中方法的形参一致 4

SSM框架--mybatis

醉酒当歌 提交于 2020-02-03 07:15:19
五.mybatis相关 1.jdbc介绍 JDBC是Java制定的接口,数据库产商依照该接口编写与自家数据库配套的实现类。比如MySQL、Oracle、SqlServer等都有自己的不同实现,这些实现类的集合既是我们笼统意义上的“驱动”。 2.preparedstatement和statement的区别 数据库系统会对sql语句进行预编译处理(如果JDBC驱动支持的话),预处理语句将被预先编译好,语法语义解析优化sql语句,指定执行计划执行并返回结果 但是很多情况,我们的一条sql语句可能会反复执行,或者每次执行的时候只有个别的值不同(比如select 的where子句值不同,update的set子句值不同,insert 的values值不同).如果每次都需要经过上面的词法语义解析,语句优化,制定执行计划等,则效率就明显不行了 所谓预编译语句就是将这类语句的值用占位符替代,可以视为将sql语句模板或者说参数化 什么是预编译(将这条sql(解析完成)语句放入缓存执行计划中,如果有相同的sql语句进来,就会直接执行该sql(解析完成)语句,省去解析的过程) 下面列出PreparedStatement的几点优势。 1.PreparedStatement可以写动态参数化的查询用PreparedStatement你可以写带参数的sql查询语句

NHibernate3剖析:Configuration篇之Cache lambda-configuration配置

元气小坏坏 提交于 2020-02-02 08:29:15
概览 在 上一篇 文章中我们介绍了lambda表达式配置(lambda-configuration),当中还剩下EntityCache扩展方法用于配置Domain的二级缓存。 实体缓存配置 以前,Fabio Maulo做过一次调查,发现差点儿没有人在hibernate.cfg.xml或者app.config文件里配置二级缓存,发现通常做法是在各个Domain的映射(Mapping)文件里使用<cache/>配置。我想当中的一个原因是大家还不知道有这个功能。只是在介绍EntityCache扩展方法之前。我们还是先回想下NH2弱类型(Weak Type)的缓存配置吧。 实体缓存配置(Weak Type) 在hibernate.cfg.xml文件里在session-factory-configuration节点里通过设置class-cache和collection-cache节点配置实体缓存和集合缓存: //Code Snippets Copyright http://lyj.cnblogs.com/ <class-cache class="NameSpace.Entity" usage="read-only|read-write|nonstrict-read-write|transactional" region="ARegion"/> <collection-cache

java并发基础知识

跟風遠走 提交于 2020-01-28 20:44:52
  这几天全国都是关键时候,放假了,还是要学习啊!很久没有写博客了,最近看了一本书,有关于java并发编程的,书名叫做“java并发编程之美”,讲的很有意思,这里就做一个笔记吧!     有需要openjdk8源码的,可以直接下载 链接:https://pan.baidu.com/s/1_uT99PLxH-STcs0zl0Mhuw 提取码:ov5b 一.了解并发和并行   并发:指的是 同一时间段内 多个任务在执行,并且没有执行结束;就好像你用一个手机看视频,你一下子想看熊出没,一下子又想看喜羊羊,那么你会怎么办?可以这个视频看几秒钟,然后那个视频看几秒钟,最关键的是当你从熊出没->喜羊羊,然后再跳到熊出没的时候,可以直接跳到上次看的记录的位置,这个才是并发最重要的地方;   在这里,你的眼睛就相当于一个cpu,在来回的切换视频,每个视频就是一个线程,然后可以跳转回上次的最后观看的位置,这功能就是类似PC计数器的作用,可以保存每个线程切换时候的上下文;   并行:理解了上面的并发,那么并行就很好理解!记得看过火影没有,可以知道鸣人用影分身修炼的情节,这个就是并行!如果你会影分身,那么你和你的分身分别用一个手机去看熊出没和喜羊羊,然后解除影分身,那么你就一下子同时看完两集了!哈哈哈,这个比喻还行吧!其实就是有两个CPU分别去执行一个线程,再把运行后的结果汇总   在多线程编程实践中