現(xiàn)在軟件或者網(wǎng)頁的并發(fā)量越來越大了,大量請求直接操作數(shù)據(jù)庫會對數(shù)據(jù)庫造成很大的壓力,處理大量連接和請求就會需要很長時間,但是實際中百分之80的數(shù)據(jù)是很少更改的,這樣就可以引入緩存來進行讀取,減少數(shù)據(jù)庫的壓力。
常用的緩存有Redis和memcached,但是有時候一些小場景就可以直接使用Java實現(xiàn)緩存,就可以滿足這部分服務(wù)的需求。
緩存主要有LRU和FIFO,LRU是Least Recently Used的縮寫,即最近最久未使用,F(xiàn)IFO就是先進先出,下面就使用Java來實現(xiàn)這兩種緩存。
LRU
LRU緩存的思想
固定緩存大小,需要給緩存分配一個固定的大小。
每次讀取緩存都會改變緩存的使用時間,將緩存的存在時間重新刷新。
需要在緩存滿了后,將最近最久未使用的緩存刪除,再添加最新的緩存。
按照如上思想,可以使用LinkedHashMap來實現(xiàn)LRU緩存。
這是LinkedHashMap的一個構(gòu)造函數(shù),傳入的第三個參數(shù)accessOrder為true的時候,就按訪問順序?qū)inkedHashMap排序,為false的時候就按插入順序,默認(rèn)是為false的。
當(dāng)把accessOrder設(shè)置為true后,就可以將最近訪問的元素置于最前面,這樣就可以滿足上述的第二點。
/** * Constructs an empty <tt>LinkedHashMap</tt> instance with the * specified initial capacity, load factor and ordering mode. * * @param initialCapacity the initial capacity * @param loadFactor the load factor * @param