FreyjaJdbcTemplate 缓存失败了

事情不能总是一帆风顺,挣扎了一阵子我宣布freyja缓存特性添加失败。

 

查询缓存本身就是一个很可笑的事情,缓存不是数据库。面对错中复杂的sql很难维护缓存,查询缓存还是需要根据业务来做,否则完全是浪费时间而且效率低下。

 

no update成了大话,sql的结构太复杂了。

原本想实现no update。就是update(Object)的时候什么都不去做。这么一来缓存中的值为最新。数据库中的值就和缓存中的不同步。

然后问题集中在查询上面:最终的结果集=数据库集+缓存集。而且因为数据库集部分结果需要与缓存中的结果同步。然后同步之后的最终结果才是正确的值。问题是sql实在是太复杂,校验缓存中的结果太难。当然如果是单表这种简单的查询还是可以做的。如果想实现no update。

 

就必须把sql拆分为单个的简单sql。其实这个是可行的。例如:

select u.* from user u left join hero h on u.uid = h.userId where u.name = '1' and h.level > 10

 

 

这个sql就应该拆为:

 

List = select * from hero where level > 10 一个结果集

 

 

for(Hero hero:list){

 

 select * from user where name = '1' and userId = hero.userId

 

}

 

 

类似这样 复杂的sql结果变为了简单的结果。然后针对每段这种简单结果进行“最终的结果集=数据库集+缓存集。”这种合并,可见这样是多么的复杂。由这样的复杂计算带来的好处是no update值不值?

 

 

 

 

 

不过对于简单的查询缓存 如单表查询还是可以加一加的。

 

我了个去,这么一来好像和hibernate没有什么区别了。而且freyja还需要山寨一个hibernate的三态,不然在用到实体关联的时候要么update的时候效率低点,要么单独update。

 

难道优点只剩下HQl部分和缓存唯一2个方面了?

 

 

山寨三态刻不容缓,查询缓存再说。

 

其实我再想有没必要搞这种sql:

 

select * from Hero h left join UserInfo i on h.user.uid = i.user.uid where h.user.name = 'a' and h.level > 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值