今天看了一下有关cache的科普文章,很是受益,其中的关键知识点摘抄下来,日后好多加复习与揣摩。
Least Frequently Used (LFU):
I
am Least Frequently used; I count how often an entry is needed by
incrementing a counter associated with each entry. I remove the
entry with least frequently used counter first am not that fast and I am
not that good in adaptive actions (which means that it keeps the
entries which is really needed and discard the ones that aren’t needed
for the longest period based on the access pattern or in other words the
request pattern) LFU机制计算entry被使用的数量,去除最少使用的entry,
速度不是很快。
Least Recently Used (LRU):
I
am Least Recently Used cache algorithm; I remove the least recently
used items first. The one that wasn’t used for a longest time. I
require keeping track of what was used when, which is expensive if one
wants to make sure that I always discards the least recently used item. So items which are frequently accessed tend to stay in
the cache. There are two ways to implement me either an array or a
linked list (which will have the least recently used entry at the back
and the recently used at the front). I am fast and I am adaptive
in other words I can adopt to data access pattern, I have a large family
which completes me and they are even better than me (I do feel jealous
some times but it is ok) some of my family member are (LRU2 and 2Q)
(they were implemented in order to improve LRU caching LRU机制去除最近最少使用的entry,最长时间没有被用到的将被删除。LRU记录entry被使用的情况。浏览器经常使用LRU机制作为缓存,新加入的entry被放在最上面,可以通过数组或是linked list实现LRU机制。
First in First out (FIFO):
I
am first in first out; I am a low-overhead algorithm I require little
effort for managing the cache entries. The idea is that I keep track of
all the cache entries in a queue, with the most recent entry at the
back, and the earliest entry in the front. When there is no place and
an entry needs to be replaced, I will remove the entry at the front of
the queue (the oldest entry) and replaced with the current fetched
entry. I am fast but I am not adaptive FIFO机制,开销很低,先进先出,速度很快。
另外还有以时间为标准的,以及以上几种的改良和平衡类型。 一般的cache产品应该有如下功能: 1-POJO Caching
Web
browsers use me for caching. New items are placed into the top of the
cache. When the cache exceeds its size limit, I will discard items from
the bottom. The trick is that whenever an item is accessed, I place at
the top.
2-HTTP Response Caching
3-JSP Caching
4-ORM Data Access Caching