认识数据缓存

数据缓存概述:在特定硬件基础上,缓存(Cache)往往是提升系统性能的关键因素(前提是系统不存在设计上的缺漏和糟糕低效的SQL);

相对于JDBC的操作,HIbernate是一个ORM框架,当然会实现更多复杂的任务,以实现内部的管理,这些额外的开销使得ORM框架的效率会低于JDBC;为了弥补这些性能上的差距,数据缓存是一个重要的策略;

 

缓存是数据库在内存中临时的容器,包含了库表数据在内存中的临时拷贝;位于数据库和数据库访问层之间;

当ORM读取数据时,首先会根据其缓存的管理策略,在缓存中查询,如果在缓存中发现了想要的数据,直接拿出来使用,避免了执行SQL去数据库里查询;

 

数据缓存策略:

持久层设计中,往往会考虑到几个不同层次的数据缓存策略,这些层次的划分标准针对不同的情况有所差异,一般而言,ORM的数据缓存包含如下:

1,事务级缓存(Transaction Layer Cache)

   在当前事务范围内的数据缓存策略(事务:可能是一个数据库事务,也可能是一个应用级事务);对于Hibernate而言,事务级缓存是基于session生命周期实现的,每个session会在内部维持一个事务缓存,此缓存会伴随着session的创建而存在,session的关闭而销毁;也被成为session内部缓存(session Level Cache);

2,应用级/进程级缓存(Application/Process Layer Cache)

   在某个应用中,或者应用中的某个独立数据访问子集中的共享缓存;此缓存可由多个事务(数据库事务或应用级事务)共享;事务之间的缓存共享策略与应用的事务隔离机制有密切的联系;在Hibernate中,应用级缓存在sessionFactory层实现,所有由sessionFactory创建的session实例共享此缓存,因此也被成为SessionFactory Level Cache;

   多实例并发运行的环境(如多机负载均衡的环境中),要小心缓存机制带来的负面影响;

   如:用户A和用户B同时操作同一个数据库,并行运行,A和B各自维持着自己的缓存,如果没有同步机制的话,A在某个操作中对数据库进行了更新,而B并没有获得其更新的通知,其b缓存的的数据还是以前版本的数据,那么B在读取数据时就会读取了以前的数据;导致数据错误;在这种情况下,不能使应用级缓存,我们需要更好的缓存解决方案;

3,分布式缓存(Cluster Layer Cache)

   在多个应用实例,多个JVM之间共享的缓存模式;分布式缓存由多个应用级缓存实例组成集群,通过某种远程机制(如,RMI或JMS)实现各个缓存实例间的数据同步,任何一个实例修改数据,将导致整个集群之间的数据状态同步;因此解决了多实例并发运行过程中的数据同步问题;

   如果对于并发读取性能要求很高,且读取操作在持久层中展绝大部分的比重,目前的 分布式缓存有点力不从心;由于多个实例间的数据同步机制,都会同步到其余的实例下,这样的远程开销是很大的;目前主流的企业级数据均已具备数据库级的缓存机制,而分布式缓存可能给我们带来一些问题的下尽量少使用;

   如果当前应用与其他应用共享数据库,也就是说,在当前运行过程中,其他应用可能会更新数据库,那么此时运用缓存策略就要格外小心;这种情况下,需要采取一些保守策略(避免缓存机制的使用);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值