当前位置:首页 » 文件管理 » spring数据库缓存

spring数据库缓存

发布时间: 2022-07-06 09:42:13

A. spring一级缓存和二级缓存的区别是什么

一级缓存:
就是Session级别的缓存。一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中。
如果短时间内这个session(一定要同一个session)又做了同一个操作,那么hibernate直接从一级缓存中拿,而不会再去连数据库,取数据。
它是内置的事务范围的缓存,不能被卸载。
二级缓存:
就是SessionFactory级别的缓存。顾名思义,就是查询的时候会把查询结果缓存到二级缓存中。
如果同一个sessionFactory创建的某个session执行了相同的操作,hibernate就会从二级缓存中拿结果,而不会再去连接数据库。
这是可选的插件式的缓存,在默认情况下,SessionFactory不会启用这个插件。
可以在每个类或每个集合的粒度上配置。缓存适配器用于把具体的缓存实现软件与Hibernate集成。
严格意义上说,SessionFactory缓存分为两类:内置缓存和外置缓存。我们通常意义上说的二级缓存是指外置缓存。
内置缓存与session级别缓存实现方式相似。前者是SessionFactory对象的一些集合属性包含的数据,后者是指Session的一些集合属性包含的数据
SessionFactory的内置缓存中存放了映射元数据和预定义sql语句。
映射元数据是映射文件中数据的拷贝;
而预定义SQL语句是在Hibernate初始化阶段根据映射元数据推导出来。
SessionFactory的内置缓存是只读的,应用程序不能修改缓存中的映射元数据和预定义SQL语句,因此SessionFactory不需要进行内置缓存与映射文件的同步。
Hibernate的这两级缓存都位于持久化层,存放的都是数据库数据的拷贝。
缓存的两个特性:
缓存的范围
缓存的并发访问策略
1、缓存的范围
决定了缓存的生命周期以及可以被谁访问。缓存的范围分为三类。
事务范围
进程范围
集群范围
注:
对大多数应用来说,应该慎重地考虑是否需要使用集群范围的缓存,因为访问的速度不一定会比直接访问数据库数据的速度快多少。
事务范围的缓存是持久化层的第一级缓存,通常它是必需的;进程范围或集群范围的缓存是持久化层的第二级缓存,通常是可选的。
2、缓存的并发访问策略
当多个并发的事务同时访问持久化层的缓存的相同数据时,会引起并发问题,必须采用必要的事务隔离措施。
在进程范围或集群范围的缓存,即第二级缓存,会出现并发问题。
因此可以设定以下四种类型的并发访问策略,每一种策略对应一种事务隔离级别。
事务型并发访问策略是事务隔离级别最高,只读型的隔离级别最低。事务隔离级别越高,并发性能就越低。
A 事务型:仅仅在受管理环境中适用。它提供了Repeatable Read事务隔离级别。
对于经常被读但很少修改的数据,可以采用这种隔离类型,因为它可以防止脏读和不可重复读这类的并发问题。
B 读写型:提供了Read Committed事务隔离级别。仅仅在非集群的环境中适用。
对于经常被读但很少修改的数据,可以采用这种隔离类型,因为它可以防止脏读这类的并发问题。
C 非严格读写型:不保证缓存与数据库中数据的一致性。
如果存在两个事务同时访问缓存中相同数据的可能,必须为该数据配置一个很短的数据过期时间,从而尽量避免脏读。
对于极少被修改,并且允许偶尔脏读的数据,可以采用这种并发访问策略。
D 只读型:对于从来不会修改的数据,如参考数据,可以使用这种并发访问策略。
什么样的数据适合存放到第二级缓存中?
1、很少被修改的数据
2、不是很重要的数据,允许出现偶尔并发的数据
3、不会被并发访问的数据
4、参考数据
不适合存放到第二级缓存的数据?
1、经常被修改的数据
2、财务数据,绝对不允许出现并发
3、与其他应用共享的数据。
Hibernate的二级缓存策略的一般过程如下:
1) 条件查询的时候,总是发出一条select * from table_name where …. (选择所有字段)这样的SQL语句查询数据库,一次获得所有的数据对象。
2) 把获得的所有数据对象根据ID放入到第二级缓存中。
3) 当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;查不到,再查询数据库,把结果按照ID放入到缓存。
4) 删除、更新、增加数据的时候,同时更新缓存。
注:
Hibernate的二级缓存策略,是针对于ID查询的缓存策略,对于条件查询则毫无作用。为此,Hibernate提供了针对条件查询的Query缓存。
Query缓存策略的过程如下:
1) Hibernate首先根据这些信息组成一个Query Key,Query Key包括条件查询的请求一般信息:SQL, SQL需要的参数,记录范围(起始位置rowStart,最大记录个数maxRows),等。
2) Hibernate根据这个Query Key到Query缓存中查找对应的结果列表。如果存在,那么返回这个结果列表;如果不存在,查询数据库,获取结果列表,把整个结果列表根据Query Key放入到Query缓存中。
3) Query Key中的SQL涉及到一些表名,如果这些表的任何数据发生修改、删除、增加等操作,这些相关的Query Key都要从缓存中清空。

B. spring为什么要用redis缓存

首先可以在多台服务器装memcached,启动时分别指定容量和端口
访问时采用集群方式访问,只需要spring配置文件里面配置即可
value可以放任何对象,包括集合
每个键值的生命周期可以在放入时独立设置
类库可以用spymemcached

数据更新方式可以在后台的定时任务中执行

下面是spring mvc中配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<bean id="memcachedClient" class="net.spy.memcached.spring.MemcachedClientFactoryBean">
<property name="servers" value="服务器A:端口,服务器B:端口,服务器C:端口" />
<property name="protocol" value="BINARY" />
<property name="transcoder">
<bean class="net.spy.memcached.transcoders.SerializingTranscoder">
<property name="compressionThreshold" value="1024" />
</bean>
</property>
<property name="opTimeout" value="2000" />
<property name="timeoutExceptionThreshold" value="1998" />
<property name="locatorType" value="CONSISTENT" />
<property name="hashAlg">
<value type="net.spy.memcached.DefaultHashAlgorithm">KETAMA_HASH</value>
</property>
<property name="failureMode" value="Redistribute" />
<property name="useNagleAlgorithm" value="false" />
</bean>

C. spring cache 怎么清楚单个缓存对象

二级缓存配置(spring+hibernate)
说明:本人不建议使用查询缓存,因为查询缓存要求完全相同的查询sql语句才会起作用,所说的查询缓存是针对第二次查询时
sql语句与第一次sql语句完全相同
那么就可以从缓存中取数据而不去数据库中取数据了,在...

D. spring怎样获取当前缓存的所有缓存key

@Cacheable(value="cachedPointsTasks") 当查询方法使用次注解时,如果已查询过,则将数据缓存到缓存空间,不再查询数据库。

E. springmvc如何把库中数据缓存到服务器,以便于客户端取值不用查数据库

前台转时间值到后台,是个字符串,后台接收到的是时间的字符串,在后台再把这两时间字符串格式化成时间格式,再利用SQL select * from tb where time between t1 and t2就OK,oracle与mysql对时间的格式化函数不一样,如果有需要在sql上将传过来的时间进行格式化再对比即可 这里是用propertyfilter的阿 用它的构造方法 里的参数EQS_数据库里的字段名,前台参数)不是直接可以与数据库里做比较了吗 刚看了下propertyfilter,里面有Date类型的,如果传的是date类型的话,到数据库里直接比较即可,如果是字符串的话,还是得转一下类型再比较

F. 数据库发生改变时怎么spring ehcache缓存

ehcache缓存的使用

下载源代码

〖 作者:小波工作室 〗〖 大小:2K 〗〖 发布日期:2009-11-12 〗〖 浏览:1 〗

一.介绍与应用场景
ehcache是一开源缓存工具,其许可证为Apache License, Version 2.0,非常友好的许可。在 sourceforge.net 上可找到它的最新版本。
缓存应用在多个领域并发挥作用,ehcache可应用于数据库访问缓存,安全认证缓存,web缓存,soap 和 RESTFul 服务缓存,应用程序持久对象缓存以及分布式缓存。
二.架设开发环境
无它,只需把ehcache的相关jar包放到classpath下,把配置文件ehcache.xml放在classpath下就可以进行应用开发了。下面是配置文件中默认配置的xml节点的内容

Xml代码
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
diskSpoolBufferSizeMB="30"
maxElementsOnDisk="10000000"
diskPersistent="false"
="120"
memoryStoreEvictionPolicy="LRU"
/>
原文件中有比较详尽的注释,在这里我简单翻译几个
1.必须要有的属性:
name: cache的名字,用来识别不同的cache,必须惟一。
maxElementsInMemory: 内存管理的缓存元素数量最大限值。
maxElementsOnDisk: 硬盘管理的缓存元素数量最大限值。默认值为0,就是没有限制。
eternal: 设定元素是否持久话。若设为true,则缓存元素不会过期。
overflowToDisk: 设定是否在内存填满的时候把数据转到磁盘上。
2.下面是一些可选属性:
timeToIdleSeconds: 设定元素在过期前空闲状态的时间,只对非持久性缓存对象有效。默认值为0,值为0意味着元素可以闲置至无限长时间。
timeToLiveSeconds: 设定元素从创建到过期的时间。其他与timeToIdleSeconds类似。
diskPersistent: 设定在虚拟机重启时是否进行磁盘存储,默认为false.(我的直觉,对于安全小型应用,宜设为true)。
: 访问磁盘线程活动时间。
diskSpoolBufferSizeMB: 存入磁盘时的缓冲区大小,默认30MB,每个缓存都有自己的缓冲区。
memoryStoreEvictionPolicy: 元素逐出缓存规则。共有三种,Recently Used (LRU)最近最少使用,为默认。 First In First Out (FIFO),先进先出。Less Frequently Used(specified as LFU)最少使用。
三.实例编写

G. spring上的缓存与页面缓存有什么作用

@Cacheable(value="accountCache"),这个注释的意思是,当调用这个方法的时候,会从一个名叫 accountCache 的缓存中查询,如果没有,则执行实际的方法(即查询数据库),并将执行的结果存入缓存中,否则返回缓存中的对象。这里的缓存中的 key 就是参数 userName,value 就是 Account 对象。“accountCache”缓存是在 spring*.xml 中定义的名称。
示例:

@Cacheable(value="accountCache")// 使用了一个缓存名叫 accountCache
public Account getAccountByName(String userName) {
// 方法内部实现不考虑缓存逻辑,直接实现业务
System.out.println("real query account."+userName);
return getFromDB(userName);

回答不容易,希望能帮到您,满意请帮忙采纳一下,谢谢 !

H. 如何在spring中使用缓存

在Spring缓存机制中,包括了两个方面的缓存操作:1.缓存某个方法返回的结果;2.在某个方法执行前或后清空缓存。
Spring仅仅是提供了对缓存的支持,但它并没有任何的缓存功能的实现,spring使用的是第三方的缓存框架来实现缓存的功能。其中,spring对EHCache提供了很好的支持。
参考博客:http://www.cnblogs.com/fysola/p/6378400.html

I. Spring如何配置数据库查询缓存/对象缓存EHCache

  1. 在ehcache.xml文件中配置查询缓存参数,ehcache.xml文件配置如下:

<ehcache>

<!--diskStore元素,配置一个目录,这个目录用来存放数据,
也就是说,如果EhCache需要把数据写入磁盘,将会写到这个目录下-->
<diskStorepath="java.io.tmpdir"/>

<defaultCache
maxElementsInMemory="10000"
eternal="false"
overflowToDisk="true"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
diskPersistent="false"
="120"/>

<cachename="ehcacheName"
maxElementsInMemory="3000"
eternal="false"
timeToIdleSeconds="3600"
timeToLiveSeconds="36000"
overflowToDisk="true"
/>
</ehcache>

2. spring的配置

第一步:给指定方法配置缓存/src/main/resources/applicationContext-resources.xml

<ehcache:proxyid="userGroupServiceProxy"refId="userGroupService">
<ehcache:cachingcacheName="cash15Min"methodName=""/>
<ehcache:cachingcacheName="cash15Min"methodName=""/>
<ehcache:cachingcacheName="cash15Min"methodName="selectuserGroupById"/>
</ehcache:proxy>

配置参数的含义如下:
id:唯一标识符
refId:需要配置缓存的service或者controller
cacheName:缓存名称
methodName:需要缓存的方法,这个方法必须是shoppingHomeService中的方法
第二步:在控制器中注入依赖的缓存userGroupServiceProxy /src/main/webapp/WEB-INF/dispatcher-servlet.xml

<beanid="PFController"class="com.java.mall.controller.PFController">
<propertyname="userService"ref="userService"></property>
<propertyname="userGroupService"ref="userGroupServiceProxy"></property>
</bean>

同时需要在实体类中注入依赖,提供setter方法,

;
publicvoidsetuserGroupService(){
this.userGroupService=userGroupService;

J. spring mvc 用memcached做缓存

首先可以在多台服务器装memcached,启动时分别指定容量和端口
访问时采用集群方式访问,只需要spring配置文件里面配置即可
value可以放任何对象,包括集合
每个键值的生命周期可以在放入时独立设置
类库可以用spymemcached

数据更新方式可以在后台的定时任务中执行

下面是spring mvc中配置:
<bean id="memcachedClient" class="net.spy.memcached.spring.MemcachedClientFactoryBean">
<property name="servers" value="服务器A:端口,服务器B:端口,服务器C:端口" />
<property name="protocol" value="BINARY" />
<property name="transcoder">
<bean class="net.spy.memcached.transcoders.SerializingTranscoder">
<property name="compressionThreshold" value="1024" />
</bean>
</property>
<property name="opTimeout" value="2000" />
<property name="timeoutExceptionThreshold" value="1998" />
<property name="locatorType" value="CONSISTENT" />
<property name="hashAlg">
<value type="net.spy.memcached.DefaultHashAlgorithm">KETAMA_HASH</value>
</property>
<property name="failureMode" value="Redistribute" />
<property name="useNagleAlgorithm" value="false" />
</bean>

热点内容
全键盘编程键盘 发布:2025-01-16 01:38:59 浏览:421
尾货棉服直播间脚本 发布:2025-01-16 01:21:45 浏览:227
vb编程步骤 发布:2025-01-16 01:11:58 浏览:201
bb霜解压 发布:2025-01-16 01:11:11 浏览:596
编程怼人 发布:2025-01-16 00:53:08 浏览:760
建立共享服务器地址 发布:2025-01-16 00:26:40 浏览:565
android开机动画修改 发布:2025-01-16 00:26:26 浏览:872
怎么解压pc版游戏 发布:2025-01-16 00:16:32 浏览:122
v9更新到91有方舟编译器吗 发布:2025-01-16 00:11:49 浏览:500
AB系统编程 发布:2025-01-16 00:09:37 浏览:621