本地缓存防止缓存击穿_防止缓存爆炸的快速提示
本地緩存防止緩存擊穿
在很多情況下,您都可以從應用程序中的常用對象緩存中受益,特別是在面向Web和微服務的環境中。 您可以在Java中執行的最簡單的緩存類型可能是引入一個私有HashMap,在計算對象之前先查詢該哈希表,以確保您不會重復執行此操作。
這是一個例子:
public class PrimeService {private Map<Long, BigInteger> cache = new HashMap<>();public BigInteger getPrime(long minimum) {return cache.computeIfAbsent(minimum, m -> BigInteger.valueOf(m).nextProbablePrime());}}這是解決該問題的快速方法,但遺憾的是效率不高。 在幾個月后人們將各種各樣的瘋狂數字輸入到服務中之后,我們將擁有一個非常大的HashMap,這可能會導致我們的內存不足。
這是解決這個問題的快速技巧。 除了使用HashMap,還可以使用LinkedHashMap并簡單地覆蓋方法removeEldestEntry。 這樣,您就可以配置自己的限制功能以防止地圖爆炸。
public class PrimeService {public final static int CACHE_MAX_SIZE = 1_000;private Map<Long, BigInteger> cache = new LinkedHashMap<>() {@Overrideprotected boolean removeEldestEntry(Map.Entry<ID, Boolean> eldest) {return size() > PrimeService.CACHE_MAX_SIZE;}};public BigInteger getPrime(long minimum) {return cache.computeIfAbsent(minimum, m -> BigInteger.valueOf(m).nextProbablePrime());}}現在,我們已經成功限制了緩存,防止了緩存爆炸。 隨著新條目的添加,舊條目將被刪除。 應該注意的是,這種解決方案在小型應用程序中效果很好,但是對于更高級的方案,您可能想使用外部緩存解決方案。 如果您有興趣在不編寫大量SQL代碼的情況下在SQL數據庫中緩存條目,我建議您使用Speedment,因為它是輕量級的并且具有非常流暢的API。
直到下一次!
翻譯自: https://www.javacodegeeks.com/2016/12/quick-tip-prevent-caches-exploding.html
本地緩存防止緩存擊穿
總結
以上是生活随笔為你收集整理的本地缓存防止缓存击穿_防止缓存爆炸的快速提示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑玩穿越火线打不开(电脑版穿越火线为什
- 下一篇: dynamodb容器使用_使用Dynam