缓存命中率
缓存命中率是我们用来衡量缓存效果的关键指标。它的计算方式是缓存命中次数除以查询总次数。在实践中,要努力把缓存命中率提高到 90% 以上。不过,缓存命中率也受到业务模式的影响,有一些业务是没有办法做到 90% 以上的。比如说有一些场景是缓存计算时间很长的结果,但是大部分请求都是小请求,也就是都不会命中缓存,这种时候缓存命中率可能连一半都没有。但是因为这些小请求计算很快,所以走实时计算响应时间也能接受,而且实时计算的数据更加准确。
实现过期机制的一般思路
从系统设计的角度来说,过期之类的机制可以考虑使用四种思路。
定时删除:是指针对每一个需要被删除的对象启动一个计时器,到期之后直接删除。
延迟队列:也就是把对象放到一个延迟队列里面。当从队列里取出这个对象的时候,就说明它已经过期了,这时候就可以删除。
懒惰删除:是指每次要使用对象的时候,检查一下这个对象是不是已经过期了。如果已经过期了,那么直接删除。
定期删除:是指每隔一段时间就遍历对象,找到已经过期的对象删除掉。
类型 | 优点 | 缺点 |
---|---|---|
定时删除 | 时间精确,对象过期后立刻就会被删除 | 定时器开销大;如果对象的过期时间被重置,需要删除原本的定时器,增加新的定时器。 |
延迟队列 | 时间精确,对象过期后立刻就会被删除 | 队列本身开销。如果对象的过期时间被重置,需要调整对象在延迟队列中的位置 |
懒惰删除 | 实现简单;重置过期时间没影响 | 时间不精确;浪费内存 |
定期删除 | 实现简单;重置过期时间没影响 | 时间不精确;性能损耗不可控 |