最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Cache監(jiān)控配置與使用規(guī)范的建議

 更新時間:2023年07月27日 11:10:21   作者:仍在奔跑的男人  
這篇文章主要介紹了Spring Cache監(jiān)控配置與使用規(guī)范的建議,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

建議

  • 程序中使用的緩存,請在cache-names里指明,如此,可以通過配置文件來明白程序中用到了哪些spring cache。
  • 請盡量對每一個cache分別設置緩存策略,因為不用的cache其使用的場景與緩存對象大小都不一樣。分別設置緩存請使用common-spring-cache-configuere。默認spring不支持。
  • 緩存策略建議閱讀緩存策略最佳配置
  • Cacheable的sync無特殊情況都設置為true,這樣,取數據時有類似LoadingCache的效果,同時利用computeIfAbsent方法實現了線程安全,也防止雪崩問題。

spring boot 2.x 監(jiān)控設置

spring boot從1.x升級到2.x之后,原先在spring-boot-actuator里默認的一些metrics不在自動生效,而是將這些metrics的功能從spring-boot-actuator遷移到了micrometer.io項目里,作為一個獨立的微服務監(jiān)控項目維護。

為此,為了使spring cache的相關metrics生效,需要進行如下配置:

1.在management.endpoints.web里添加caches與metrics兩個接口暴露

默認只暴露health、info。

management:
  endpoints:
    web:
      exposure:
        include: info, health, metrics, caches

2.在spring.cache里指定cache-names的配置

spring:
  cache:
    cache-names: books, rooms

如果不指定cache-names,spring cache metrics是不會生效的,因為spring是在加載的過程中來確認需要對哪些cache來監(jiān)控,像Cacheable之類需要動態(tài)加入的cache,spring在加載過程中無法感知到。

3.對cache provider啟動調用記錄功能

以caffeine為例,在spec中加入recordStats,如下:

spring:
  cache:
    cache-names: books, rooms
    caffeine:
      spec: recordStats

4.相關url

  • /actuator/caches 獲取cache manager內的cache實例
  • /actuator/metrics/cache.gets 獲取cache內緩存對象的情況,包括hit/miss的情況,具體參考tags drillDown的使用方式https://docs.spring.io/spring-boot/docs/2.0.0.BUILD-SNAPSHOT/actuator-
  • api//html/#metrics-drilling-down
  • /actuator/metrics/cache.puts
  • /actuator/metrics/cache.eviction

5.舉例

curl localhost:8080/actuator/metrics/ 訪問所有支持的metrics

{
    "names":[
        "jvm.memory.max",
        "jvm.threads.states",
        "process.files.max",
        "jvm.gc.memory.promoted",
        "cache.puts",
        "cache.size",
        "cache.evictions",
        "system.load.average.1m",
        "jvm.memory.used",
        "jvm.gc.max.data.size",
        "jvm.gc.pause",
        "jvm.memory.committed",
        "system.cpu.count",
        "logback.events",
        "http.server.requests",
        "tomcat.global.sent",
        "jvm.buffer.memory.used",
        "cache.eviction.weight",
        "tomcat.sessions.created",
        "jvm.threads.daemon",
        "system.cpu.usage",
        "jvm.gc.memory.allocated",
        "tomcat.global.request.max",
        "tomcat.global.request",
        "cache.gets",
        "tomcat.sessions.expired",
        "jvm.threads.live",
        "jvm.threads.peak",
        "tomcat.global.received",
        "process.uptime",
        "tomcat.sessions.rejected",
        "process.cpu.usage",
        "tomcat.threads.config.max",
        "jvm.classes.loaded",
        "jvm.classes.unloaded",
        "tomcat.global.error",
        "tomcat.sessions.active.current",
        "tomcat.sessions.alive.max",
        "jvm.gc.live.data.size",
        "tomcat.threads.current",
        "process.files.open",
        "jvm.buffer.count",
        "jvm.buffer.total.capacity",
        "tomcat.sessions.active.max",
        "tomcat.threads.busy",
        "process.start.time"
    ]
}

curl localhost:8080/actuator/metrics/cache.gets 訪問緩存get情況

{
    "name":"cache.gets",
    "description":"The number of times cache lookup methods have returned a cached value.",
    "baseUnit":null,
    "measurements":[
        {
            "statistic":"COUNT",
            "value":0
        }
    ],
    "availableTags":[
        {
            "tag":"result",
            "values":[
                "hit",
                "miss"
            ]
        },
        {
            "tag":"cache",
            "values":[
                "rooms",
                "books"
            ]
        },
        {
            "tag":"name",
            "values":[
                "rooms",
                "books"
            ]
        },
        {
            "tag":"cacheManager",
            "values":[
                "cacheManager"
            ]
        }
    ]
}

curl “localhost:8080/actuator/metrics/cache.gets?tag=result:hit&tag=cache:books” 獲取名為books的cache的命中次數

{
    "name":"cache.gets",
    "description":"The number of times cache lookup methods have returned a cached value.",
    "baseUnit":null,
    "measurements":[
        {
            "statistic":"COUNT",
            "value":0
        }
    ],
    "availableTags":[
        {
            "tag":"name",
            "values":[
                "books"
            ]
        },
        {
            "tag":"cacheManager",
            "values":[
                "cacheManager"
            ]
        }
    ]
}

定制化配置

默認coffeine.spec的配置是對全體配置的,如果要分開配置可以自定義實現CacheManager,參見common-spring-cache-configurer. 使用時,直接引入該jar包即可。

        <dependency>
            <groupId>com.iqiyi.intl.common</groupId>
            <artifactId>common-spring-cache-configurer</artifactId>
            <version>1.4.0-SNAPSHOT</version>
        </dependency>

使用配置如下(替換掉原先的spring.cache的配置):

cache.items:
  - name: books
    spec: recordStats,softValues, maximumSize=1,expireAfterWrite=100s
  - name: rooms
    spec: expireAfterWrite=50s, maximumSize=10000

CacheManager自定義實現如下:

@Configuration
@ConditionalOnClass({ Caffeine.class, CaffeineCacheManager.class })
@EnableConfigurationProperties(CacheProperties.class)
public class AutoCustomizedCaffeineCacheConfigurer {
    @Autowired
    private CacheProperties cacheProperties;
    @Bean
    @Primary
    public CacheManager caffeineCacheManager() {
        SimpleCacheManager cacheManager = new SimpleCacheManager();
        List<CaffeineCache> caches = cacheProperties.getItems().stream()
                .map(item -> new CaffeineCache(item.getName(), Caffeine.from(item.getSpec()).build()))
                .collect(Collectors.toList());
        cacheManager.setCaches(caches);
        return cacheManager;
    }
}

緩存策略最佳配置

  • 設置softvalues, 當JVM內存耗盡時,會觸發(fā)GC,回收這些cache的內存,防止OOM。
  • 設置size或weight,限定緩存的最大占用空間,保證系統(tǒng)正常運行。
  • 設置ttl/tti,設置過期時間,根據業(yè)務實際場景決定時長。

可以這么理解:

首先通過size或者weight來確定緩存總共占用的最大空間,softValues是用于兜底策略,防止萬一size/weight設置的不正確,導致的OOM。對于ttl/tti,則是針對業(yè)務場景,來保證數據的時效性,用于程序運行的正確性。

舉例如下:

cache.items:
  - name: books
    spec: softValues, maximumSize=1,expireAfterWrite=100s

說明:

  • 所有的配置都是針對每一個cache生效的,對于cacheManager, 也就是會有多個cache,所以占用的內容空間也會增加多份。所以cache不能設置過大。
  • ttl/tti說明,ttl (time to live), 即expireAfterWrite;tti (time to idle), 即expireAfterRead, 如果設置tti,則意味著,只要這個key直接被讀到,則緩存會一直不失效,所以請慎用tti。

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • java隨機數生產算法實例

    java隨機數生產算法實例

    下面小編就為大家?guī)硪黄猨ava隨機數生產算法實例。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • SpringBoot自動重啟、熱啟動方式

    SpringBoot自動重啟、熱啟動方式

    這篇文章主要介紹了SpringBoot自動重啟、熱啟動方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 一個簡單的Python名片管理系統(tǒng)

    一個簡單的Python名片管理系統(tǒng)

    這篇文章主要為大家詳細介紹了一個簡單的Python名片管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Java實現石頭剪刀布小游戲

    Java實現石頭剪刀布小游戲

    這篇文章主要為大家詳細介紹了Java實現石頭剪刀布小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • Java基礎之詳細總結五種常用運算符

    Java基礎之詳細總結五種常用運算符

    在通常代碼邏輯處理中,我們常常都會使用到運算符,今天我們就詳細了解一下運算符的使用以及分類.運算符是對常量或者變量進行操作的符號,它分為算術運算符,賦值運算符,比較運算符,邏輯運算符以及位運算符.需要的朋友可以參考下
    2021-05-05
  • Spring Date jpa 獲取最新一條數據的實例代碼

    Spring Date jpa 獲取最新一條數據的實例代碼

    這篇文章主要介紹了Spring Date jpa 獲取最新一條數據的實例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 深入了解MyBatis二級緩存

    深入了解MyBatis二級緩存

    今天小編就為大家分享一篇關于深入了解MyBatis二級緩存,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • SpringBoot集成Validation參數校驗

    SpringBoot集成Validation參數校驗

    這篇文章主要為大家詳細介紹了SpringBoot集成Validation參數校驗,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Spring Boot中的日志log原理與自定義日志格式

    Spring Boot中的日志log原理與自定義日志格式

    這篇文章主要介紹了Spring Boot中的日志log原理與自定義日志格式,本文將介紹一種日志追蹤的方式,來全鏈路追蹤請求的處理,并設置相應的格式,輸出更加直觀、易處理的日志,需要的朋友可以參考下
    2026-02-02
  • Java實現TCP互發(fā)消息

    Java實現TCP互發(fā)消息

    這篇文章主要為大家詳細介紹了Java實現TCP互發(fā)消息,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07

最新評論

阿拉善左旗| 泗阳县| 手游| 普陀区| 松桃| 沙坪坝区| 于都县| 云林县| 夏邑县| 洮南市| 安顺市| 古交市| 邳州市| 肃北| 大渡口区| 彭水| 福建省| 佛教| 大同县| 正蓝旗| 浑源县| 阿克苏市| 屏南县| 鹤壁市| 光泽县| 昆山市| 柯坪县| 沙雅县| 华池县| 乐山市| 交口县| 津南区| 中西区| 云浮市| 五河县| 清水河县| 盈江县| 洪泽县| 河北省| 南和县| 宁阳县|