如何最大化利用缓存

在查询缓存里面,我这么处理一条查询sql:

 

select o from table where x

 

重点是 o 和 x

 

o是查询结果,x是查询条件

 

查询结果不重要,查询条件需要判断你能否处理得了查询条件。

 

目前,查询条件中带函数的sqlfreyja处理不了。原因很简单,如:select * from user where date_format(createTime,'%y%m') > '....'

这条sql处理不了的原因是 date_format是sql特有函数。不能被表达式语言处理,在维护查询缓存的时候根本就处理不了。

 

select count(*),xx from user where ....这类其实也不好处理。使用缓存就是为了减少数据库的连接次数,并且提高效率。类似于 count(*)这种函数,如果不能在内存中计算 就需要直接查询数据库结果。

 

使用查询缓存和使用场景是息息相关的,他能决定查询缓存是否真的提高了效率。一般的公共数据比较适合使用查询缓存,这类数据的特点是:量少、查询多、更改少。当然,量的多少和查询缓存没太大关系,满足后面2个条件就行了。

 

------前面几篇我提到的被我否定的no update方式缓存,我最近又有了一点新的想法。

 

我发现,一张表的字段可以分为2类:孤立的和群聚的。注意,他们和update频率无关

 

孤立的就是那类很少被用在查询语句里面

群聚的正好相反。

 

如,有时候你有没有想过,为什么用户就这么的操作一次就一定要去update数据库呢? 如果有,那么说明这个字段属于孤立的字段。因为,这个字段的改变实际上不需要频繁update,只需要在任意一个时间“处理”掉就行了。

好可怜啊,这类字段。你不怎么去关心他们什么时候会序列化到数据库,只用确保最终序列化到数据库就行了。与之相反,如果这个字段涉及到RMB你就不会这么怠慢了。

 

 

新的no update方案就要从这些字段下手。另外,带来的提升的要求比较苛刻。即便是孤立的,如果字段update次数过少,很显然看不出什么提升。能看出显著提升的必定是孤立的、update频繁的字段。

 

只有满足这2个条件,你才会觉得值了。

 

这个功能推出还需要等待另外一个功能:动态update。 虽然hibernate里面不建议开启动态update,但是我想不明白一个问题:为什么我仅仅修改user的level 1改为2 却需要update整条记录?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值