技术集锦
1.hibernate缓存、二级缓存是怎么实现的,除了oscache还引用了哪些缓存,缓存的原理是怎样的,如果自己去模拟二级缓存该怎么写,假如数据被不停地修改或更新,那怎样保证缓存中的数据是最新的?
(1)一级缓存就是Session级别的缓存,一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中,如果短时间内这个
session(一定要同一个session)又做了同一个操作,那么hibernate直接从一级缓存中拿,而不会再去连数据库,取数据;
(2)二级缓存就是SessionFactory级别的缓存,顾名思义,就是查询的时候会把查询结果缓存到二级缓存中,如果同一个sessionFactory
创建的某个session执行了相同的操作,hibernate就会从二级缓存中拿结果,而不会再去连接数据库;
(3)Hibernate中提供了两级Cache,第一级别的缓存是Session级别的缓存,它是属于事务范围的缓存。这一级别的缓存由hibernate管理
的,一般情况下无需进行干预;第二级别的缓存是SessionFactory级别的缓存,它是属于进程范围或群集范围的缓存。这一级别的缓
存可以进行配置和更改,并且可以动态加载和卸载。 Hibernate还为查询结果提供了一个查询缓存,它依赖于第二级缓存;
OScache特点:
所谓缓存,就是将程序或系统经常要调用的对象存在内存中,以便其使用时可以快速调用,不必再去创建新的重复的实例。这样做可以减少系统开销,提高系统效率。
缓存主要可分为二大类:
一、通过文件缓存,顾名思义文件缓存是指把数据存储在磁盘上,不管你是以XML格式,序列化文件DAT格式还是其它文件格式;
二、内存缓存,也就是实现一个类中静态Map,对这个Map进行常规的增删查.
使用缓存的原则就是:尽量用低开销的计算代替高开销的计算。比如直接从其他数据库 查询的开销要远高于内存中的计算返回,网络请求要远高于本地(同一vm中)请求。
memcache:分布式应用 内存对象缓存系统开发,占用其他机子的内存。很多互联网 ,负载均衡三台(以三台为例)其他web服务器 可以共享一台memcache的资源。传递的信息以键值对的形式存储。传递的数据要实现序列化。
oscache:页面级缓存(网上强调最多的东西),占用本机的内存资源。可 以选择缓存到硬盘,如存取到硬盘重启服务也可重新获得上次持久化的资源,而如果缓存到内存就不行。一般没必要缓存到硬盘,因为i/o操作也是比较耗资源,和从其他数据库 取往往优势很小。oscache存取数据的作用域分为application和session两种。
ehcache:hibernate 缓存,dao缓存,安全性凭证缓存(acegi),web缓存,应用开发持久化和分布式应用 缓存。
如何保证缓存和数据库数据一致性:http://www.36dsj.com/archives/43950
RPC原理分析:http://blog.csdn.net/mindfloating/article/details/39474123