javascript
有关Spring缓存性能的更多信息
這是我們最后一篇關(guān)于Spring的緩存抽象的文章的后續(xù)文章 。
作為工程師,您可以通過(guò)了解所使用的某些工具的內(nèi)部知識(shí)來(lái)獲得寶貴的經(jīng)驗(yàn)。 了解工具的行為有助于您在做出設(shè)計(jì)選擇時(shí)變得更加成熟。 在這篇文章中,我們描述了一個(gè)基準(zhǔn)測(cè)試實(shí)驗(yàn)和結(jié)果,這些結(jié)果將幫助您了解Spring的內(nèi)置緩存注釋。
看一下以下兩種方法:
@Cacheable (value = "time" , key = "#p0.concat(#p1)" ) public long annotationWithSpel(String dummy1, String dummy2) { "#p0.concat(#p1)" annotationWithSpel(String dummy1, String dummy2) { return System.currentTimeMillis(); } System.currentTimeMillis(); } @Cacheable (value = "time" ) public long annotationBased(String dummy1, String dummy2) { @Cacheable (value = annotationBased(String dummy1, String dummy2) { return System.currentTimeMillis(); } System.currentTimeMillis(); }在這里,我們有兩種非常相似的方法,每種方法都使用Spring Cache的內(nèi)置@Cacheable注釋進(jìn)行注釋。 第一個(gè)包含使用Spring Expression Language編寫(xiě)的表達(dá)式。 該表達(dá)式用于配置如何使用方法參數(shù)計(jì)算緩存鍵。 第二個(gè)依賴于Spring的默認(rèn)行為,即“所有方法參數(shù)均視為鍵”。 實(shí)際上,以上兩種方法實(shí)際上都導(dǎo)致完全相同的外部行為。
我們進(jìn)行了一些基準(zhǔn)測(cè)試,從而可以評(píng)估其性能:
Benchmark Mode Cnt Score Error Units CacheBenchmark.annotationBased avgt 5 271.975 ± 11.586 ns/op CacheBenchmark.spel avgt 5 1196.744 ± 93.765 ns/op CacheBenchmark.manual avgt 5 16.325 ± 0.856 ns/op CacheBenchmark.nocache avgt 5 40.142 ± 4.012 ns/op事實(shí)證明,具有手動(dòng)配置的緩存的方法運(yùn)行速度慢4.4倍! 事后看來(lái),由于間接費(fèi)用,這種結(jié)果似乎是合理的。 Spring框架必須解析任意復(fù)雜的表達(dá)式,并且在此計(jì)算中消耗了一些周期。
我們?yōu)槭裁匆獙?xiě)這個(gè)故事? 好 -
您應(yīng)該檢查您的代碼庫(kù),并進(jìn)行檢查或?qū)徍恕?杰蒂森(Jettison)也在其中一些實(shí)例中獲得了性能提升。 您很可能在某些實(shí)例中也手動(dòng)配置了緩存鍵。 請(qǐng)記住,這與Spring Cache默認(rèn)為您提供的行為完全相同。 絕對(duì)的雙贏局面!
翻譯自: https://www.javacodegeeks.com/2019/04/more-about-spring-cache-performance.html
總結(jié)
以上是生活随笔為你收集整理的有关Spring缓存性能的更多信息的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 电脑主题windows7(电脑主题壁纸)
- 下一篇: 条形码扫描器电脑版(条形码扫描器手机版)