缓存模式

时间:2012-10-05 08:09:06

标签: design-patterns caching

如果我必须创建一个Web服务来提供对字典的访问,我想最好不要在每个请求上激活SQL查询,而是将之前的结果保留在内存中,并且仅当条目没有时访问数据库直到现在才被要求。

但是这样,我的字典会增加并最终得到内存中的完整SQL表。

我正在根据每个条目的使用频率搜索字典的一种清洁模式。但是“最后访问时间”不是一个很好的方法,也不是命中数字,因为它会随着时间的推移而增长,并不能反映我字典条目的平均当前使用情况。

有没有办法知道要丢弃哪些条目以尽可能多地访问数据库?

3 个答案:

答案 0 :(得分:0)

有许多开源产品可以解决这个问题。对于负载较高的网站,我对memcachedredis有很好的使用经验。

答案 1 :(得分:0)

最常见的是“LRU”,它代表“最近最少使用”。这是您所指的“最后访问时间”,在实践中效果非常好。

维基百科有很多不同策略的例子,也许你可以找到适合你的策略: http://en.wikipedia.org/wiki/Cache_algorithms#Examples

答案 2 :(得分:0)

“我的字典将增加并最终在内存中使用完整的SQL表” - 如何在内存中定义完整的SQL-Table。您是否可以定义固定的内存大小? 如果是,那么您可以创建该固定大小的优先级队列。 弹出的第一个元素应该是频率最低的元素,您可以使用Comparable / Comparator Interface来实现。 当队列已满并且您必须插入传入元素时,只需触发queue.pop()然后插入传入元素。通过这种方式,您可以继续清洁最不常用的清洁工具。