之前我對於快取的理解僅僅停留在redis上,使用第三方元件來幫助我們儲存一些經常用到但是不經常變動的資料,因為這些持久化資料如果每次都從資料庫中查出來,資料庫的壓力會比較大,同時也沒有必要每次都從資料庫中查詢。
最近我在做乙個2023年的老專案,因為業務需求經常要從資料庫中查詢字典,但是字典表中資料有74萬條,資料量大,查詢效能上有所欠缺,所以想到了將字典表中資料儲存到快取中。因為是老專案,就不上redis了,直接使用記憶體去儲存。
一開始我想到的是在專案啟動的時候將所有資料載入到記憶體中,等到**都寫好了然後發現在查詢字典表所有資料的時候會卡住,我以為我專案出問題了,但是也沒有報任何錯誤資訊,然後單獨使用sql進行了一次查詢,發現查詢需要10s,因為我使用的僅僅是select * from 表,無法優化sql。於是開始使用另一種快取策略,在查詢字典資料的時候先從快取中查詢,如果查詢不到則去資料庫查,然後再將查到的資料存入快取中,等到下一次查詢相同資料的時候便直接從快取當中獲取。
我使用的是concurrenthashmap併發map來儲存資料,這樣可以解決多個執行緒之間的併發操作問題。
public class cache
傳入字典型別,先在快取中查詢,如果查詢不到則去資料庫中查,資料庫中能查詢到則放入快取中,等到下一次相同的查詢就會直接從快取中查詢了。
public mapgetdictmap(string lxjp)
}return map;
}
雖然這個方法沒有被用到,還是在這裡寫出來。
import com.cachedictservice;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.context.event.contextrefreshedevent;
import org.springframework.stereotype.service;
@service
}}
public void init()
將資料庫中所有字典資料儲存到concurrenthashmap快取中
public static void init(listlist)
}else
}//初始化
cache.dictmapcache = mapcachemap;
}}
具體使用哪種快取策略還是要根據專案具體專案來做,沒有最好的只有更合適的。 快取的運用
根據人物屬性得到資料列表 幾條資料 型別 條件 是否使用快取 過期時間 分鐘 public datatable getattrtop int top,string attr,string where,bool iscache,int outtime return datatable obj else...
OSCache 快取運用
對於一些 型別的專案.我們可以採取的方案就是減少和資料庫方面的交換.這樣我們可以使用快取.由於專案使用hibernate已經使用了ehcache的2級快取.這裡可以在web層上使用oscache來進行快取 需要的jar包有 oscache.jar和lib commons logging.jar 開發...
git清除快取命令的運用
exe snake 可執行的二進位制檔案 sh shell指令碼檔案 idea out class檔案 myalgorithms.iml idea git add git commit m 一些描述 git push 結果a本地倉庫的快取區已經有了.idea資料夾,但這個資料夾b用不到,此時新增.g...