技术标签: java缓存技术专栏 java技术--基于hibernate的缓存机制
hibernate缓存:一级缓存,二级缓存
1.一级缓存:即session级别的缓存,亦即事务级别的缓存策略,这种缓存策略是Hibernate内置的,不可被拆卸的
2.二级缓存:即SessionFactory的外置缓存,其同时也称为进程级缓存或集群范围内的缓存。
(1)由于二级缓存是进程级的可能出现多线程并发问题,需要设置缓存的并发策略
(2)二级缓存是独立于Hibernate的软件部件,多个厂商和组织都提供有缓存产品,例如,EHCache和OSCache等等
(3)hibernate的二级缓存是需要第三方支持的,hibernate默认的二级缓存插件为ehcache
(hibernate二级缓存多应用在多读少写的实体对象中!)
使用hibernate注解方式使用二级缓存开发步骤
1、在src文件夹下添加ehcache.xml配置文件 ;
<ehcache>
<?xml version="1.0" encoding="UTF-8"?>
<!-- maxElementsInMemory="10000" 缓存中最大允许创建的对象数 -->
<!-- eternal="false" 缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期 -->
<!-- timeToIdleSeconds="10" 缓存数据钝化时间(设置对象在它过期之前的空闲时间) -->
<!-- timeToLiveSeconds="20" 缓存数据的生存时间(设置对象在它过期之前的生存时间) -->
<!-- overflowToDisk="true" 内存不足时,是否启用磁盘缓存 -->
<!-- 指定一个文件目录,当EhCache把数据写到硬盘上时,将把数据写到这个文件目录下 -->
<diskStore path="java.io.tmpdir"/>
<!-- 设定缓存的默认数据过期策略 -->
<defaultCache
maxElementsInMemory="10000"
eternal="false"
overflowToDisk="true"
timeToIdleSeconds="10"
timeToLiveSeconds="20"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"/>
</ehcache>
2.hibernate配置文件中,配置Ehcache相关属性(如果与spring整合,直接在spring的配置文件applicationContext.xml中添加)
<!-- 使用二级缓存:false -->
hibernate.cache.use_second_level_cache=true
<!-- 启动查询缓存:false -->
hibernate.cache.use_query_cache=true
<!-- 二级缓存插件:org.hibernate.cache.EhCacheProvider -->
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
<!-- 是否收集有助于性能调节的统计数据:true -->
hibernate.generate_statistics=true
3.引入相应jar包(如果还在手动添加jar包的,可以尝试使用maven)
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>3.6.9.Final</version>
</dependency>
( 这样就引入了hibernate-ehcache-3.6.9.jar及其依赖包ehcache-core-2.4.3.jar)
4.注解方式配置实体, 在实体上配置@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 并指定缓存 并发策略。
4.1:Eache的四种缓存并发策略如下
(1)read-write(读写型):更新缓存的时候会锁定缓存中的数据
(2)nonstrict-read-write(非严格读写型):不锁定缓存中的数据
(3)read-only(只读型):适用从来不会被修改的数据(如参考数据)
(4)transactional:提供对全事务缓存机制的支持,比如JBoss TreeCache
4.2:Eache缓存用到的注解
(1)@Cacheable: 作用在方法上,触发缓存读取操作
(2)@CacheEvict: 作用在方法上,触发缓存失效操作
(3)@CachePut: 作用在方法上,触发缓存更新操作
(4)@Cache: 作用在方法上,综合上面的各种操作,在有些场景下,调用业务会触发多种缓存操作
(5)@CacheConfig: 在类上设置当前缓存的一些公共设置
5.Eache缓存优缺点
(1)与java程序是绑在一起的,java程序活着,它就活着
(2)可以集群,可以整合Spring,Spring Boot中
(3)不能保证数据的安全,Cache只是简单的加速:有可能产生数据不一致的情况,清除缓存可解决
(4)主要是对数据库访问的缓存,相同的查询语句只需查询一次数据库,从而提高了查询的速度
(5)是一个纯Java的进程内缓存框架,具有快速、精干等特点
(6)使用磁盘Cache的时候非常占用磁盘空间
6.Eache缓存磁盘路径设置
(1)<diskStore path="java.io.tmpdir"/>这个是磁盘存储路径,当内存缓存满了的时候,就会往这里面放
(2)java.io.tmdir是操作系统缓存的临时目录,不同操作系统缓存目录不一样
<1>Windows: java.io.tmpdir:[C:\Users\登录用户~1\AppData\Local\Temp\]
<2>Linux: java.io.tmpdir: [/tmp]
<3>Mac OS X: java.io.tmpdir: [/tmp]
<4>Solaris: java.io.tmpdir:[/var/tmp/]
文章浏览阅读569次。为了充分利用elasticsearch的检索,及速度快; kibana的界面自动抽象,及交互能力,我们使用filebeat获取数据,如日志等,发送到elastic.暂时没有使用logstash,根据文献,就是它多了一个filter的功能,还要转一道,暂时不用。另修改var.path可以确定你要filebeat的日志的路径 。 记得enable:true.//todo : 还有一个f..._filebeat单独使用
文章浏览阅读4.8k次。什么是Linux?Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Unix和Linux有什么区别?Linux和Unix都是功能强大的操作系统,..._unix和linux的区别
文章浏览阅读1k次。拓扑如下:其中g0/0.1与g0/0.2是基于g0/0口(物理端口)的虚拟端口,又称子接口,若g0/0口坏掉,则其均不能工作。注意:encapsulation dot1Q 10 为封装协议,其中10要与Vlan号一样,即vlan10的网关要封装dot1Q 10,vlan20封装dot1Q 20,以此类推。PC1: ..._g0/1口分成g/0.1和g0/0.2这是什么
文章浏览阅读3.7k次。CAS服务端配置,看这里本文基于Flask-CAS作为客户端与CAS服务端调试,测试多属性返回信息。1 环境说明Flask-CAS: 1.0.1Flask: 1.0.22 客户端工程目录#!/usr/bin/env python# -*- coding: utf-8 -*-"""__title__ = ''"""import sslimport flas..._flask cas
文章浏览阅读979次。文章目录需求分析数据来源创建数据库和表加载全国省市区数据请求和解析数据工具类碎片界面布局加载数据碎片逻辑测试本系列记录一下跟随guolin大神学习的项目自己完成一个天气预报Android App.需求分析可以列出全国所有省市县可以查看全国任意城市天气信息可以自由切换城市,查看不同地区天气有手动刷新和后台自动更新天气功能数据来源郭神提供的数据接口,包含全国省市县名称和编号信息:省级单位:http://guolin.tech/api/china服务器会返回JSON格式数据市级单位:_android 第一行代码 weather?cityid=1&key=bc0418b57b24918819d3974ac1285d9
文章浏览阅读641次。设置这个就可以了 npm config set registry https://registry.npm.taobao.org 让我虎躯一震,哈哈哈哈哈哈哈哈_npm get registry一直都是淘宝镜像
文章浏览阅读2.7k次。在大多数的PCB设计过程中,过孔都需要盖油。方法一:打开PADSlayout界面,点击“设置”→“焊盘栈”,在“焊盘栈特性”窗口,正常添加一个过孔并修改“名称”、“直径”、“尺寸”等信息,此时的过孔是默认盖油的,操作如下图所示:添加并配置好过孔后,点击“添加”,在弹出的“添加层”选择“Solder Mask Top”和“Solder Mask Bottom”(顶层或底层都可以添加,根据项目需要)并修改“直径”,不盖油一般要外扩4mil或0.1mm。不盖油的过孔操作如下图所示:..._pads过孔盖油怎么设置
文章浏览阅读5.5k次,点赞8次,收藏53次。TCP/IP OSI 各层的介绍_七层网络模型和五层区别
文章浏览阅读1.7w次。1、打开IE(或者文件夹)的菜单"工具"-"Internet选项";2、点击“高级”标签卡;3、将“浏览”节点下的“使用被动FTP(为防火墙和DSL调制解调器兼容性)”前面的勾去掉。..._windows无法访问此文件夹请确保输入的文件名
文章浏览阅读1.1k次。Linux系统挂载 NTFS 格式的硬盘挂载报错: /sbin/mount.ntfs-3g: symbol lookup error: /sbin/mount.ntfs-3g: undefined symbol: ntfs_xattr_build_mapping 这是由于库的名字冲突造成的,可以执行下ldd /sbin/mount.ntfs-3g查看下动态库信息解决方案:mv /lib/libntfs-3g.so.88 /lib/libntfs-3g.so.88.bakldd $(w_/sbin/mount.ntfs-3g: symbol lookup error: /sbin/mount.ntfs-3g: undefined sym
文章浏览阅读5.2k次,点赞3次,收藏6次。背景若有一幅航拍的原始影像,需要自动产品化,那就必须要在后端进行坐标系的统一转换,这时用到开源的Geotools就很简单了。处理使用Operations类下的resample方法(重采样)可以解决这个问题,它的方法定义如下: Coverage org.geotools.coverage.processing.Operations.resample(Coverage source, Coordina..._geotools支持4490转4326嘛
nghttp2 报错error: Libtool library used but ‘LIBTOOL‘ is undefined如果重新安装libtool和autoconf升级到2.69后,还是报错,则进行下面的操作:1,查看aclocal的路径 aclocal --print-ac-dir显示/usr/local/share/libtool/m4ls看看里面没有m4文件。则copy...