首页 > orm框架怎么实现缓存呢

orm框架怎么实现缓存呢

最近在写一个简单的orm框架想加入缓存机制,来请教一下
比如说hibernate

tx = session.beginTransaction();
entity.setxx("a");
session.save(entity);
entity.setxx("cc");
tx.commit();

对于上述代码执行了save方法后 entity变成了持久态的对象,在这后面执行了entity.setxx("cc")后的entity在事务提交后cc会代替a也会更新至数据库。搜索结果是提交事务是会同步通过sql语句insert update delete把内存中的这个持久化对象同步入数据库,请问整个session的缓存大概是怎么实现的,提交事务时的同步是通过拦截commit在其之前通过映射实现insert update delete的吗?网络限速源码一直下不了:(


已经找到答案了并实现了 特来自答
和我猜想的一样使用key-value的Map方式来缓存
之前的理解有偏差,调用了save update delete这些方法后,对象变成持久态,但并不会立刻执行相应的操作与数据库打交道,而是保存于map表中,如果后续有修改,则从map中读取,若对象存在则修改对象,若不存在,则添加进去。当事务提交时才会执行相应的save update delete操作。当Connection关闭后则清空缓存。
/暂时的思路是在一个Connection中维护两个Map,一个用来通过sql操作指向主键关键字,一个则是主键关键字指向对象,拦截事务提交,在前通过两个Map进行数据库的操作。/
最新思路
在一个Connection中维护两个Map,设定一个index用来保存对象个数,一个map通过index指向sql操作,一个则是通过index指向对象,拦截事务提交,在前通过两个Map进行数据库的操作。为什么不用主键关键字呢,因为考虑到主键可能是自增的,那么在save的时候可以不对其设定值,但如果有多个对象需要save的话,map就会无法维护,可能有更好的做法,暂时还没想到。
个人理解,若有不对,欢迎指出


参考ecached


更深入呢? Map方式只是指出了缓存的数据结构吧

【热门文章】
【热门文章】