91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot+SpringCache實現兩級緩存的示例分析

發布時間:2021-04-30 10:06:08 來源:億速云 閱讀:357 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關SpringBoot+SpringCache實現兩級緩存的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

springboot是什么

springboot一種全新的編程規范,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程,SpringBoot也是一個服務于框架的框架,服務范圍是簡化配置文件。

1. 緩存、兩級緩存

1.1 內容說明

Spring cache:主要包含spring cache定義的接口方法說明和注解中的屬性說明
springboot+spring cache:rediscache實現中的缺陷
caffeine簡介
spring boot+spring cache實現兩級緩存

使用緩存時的流程圖

SpringBoot+SpringCache實現兩級緩存的示例分析

1.2 Sping Cache

spring cache是spring-context包中提供的基于注解方式使用的緩存組件,定義了一些標準接口,通過實現這些接口,就可以通過在方法上增加注解來實現緩存。這樣就能夠避免緩存代碼與業務處理耦合在一起的問題。spring cache的實現是使用spring aop中對方法切面(MethodInterceptor)封裝的擴展,當然spring aop也是基于Aspect來實現的。
spring cache核心的接口就兩個:Cache和CacheManager

1.2.1 Cache接口

提供緩存的具體操作,比如緩存的放入,讀取,清理,spring框架中默認提供的實現有

SpringBoot+SpringCache實現兩級緩存的示例分析

1.2.2 CacheManager接口

主要提供Cache實現bean的創建,每個應用里可以通過cacheName來對Cache進行隔離,每個CaheName對應一個Cache實現,spring框架中默認提供的實現與Cache的實現都是成對出現的

1.2.3 常用的注解說明

  • @Cacheable:主要應用到查詢數據的方法上

  • @CacheEvict:清除緩存,主要應用到刪除數據的方法上

  • @CachePut:放入緩存,主要用到對數據有更新的方法上

  • @Caching:用于在一個方法上配置多種注解

  • @EnableCaching:啟用spring cache緩存,作為總的開關,在spring boot的啟動類或配置類上需要加入次注解才會生效

2.實戰多級緩存的用法

package com.xfgg.demo.config;

import lombok.AllArgsConstructor;
import com.github.benmanes.caffeine.cache.Caffeine;

import org.springframework.cache.CacheManager;

import org.springframework.cache.caffeine.CaffeineCacheManager;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.TimeUnit;

@Configuration
@AllArgsConstructor
//把定義的緩存加入到Caffeine中
public class CacheConfig {
    @Bean
    public CacheManager cacheManager(){
        CaffeineCacheManager cacheManager = new CaffeineCacheManager();
        cacheManager.setCaffeine(Caffeine.newBuilder()
                //使用refreshAfterWrite必須要設置cacheLoader
                //在5分鐘內沒有創建/覆蓋時,會移除該key,下次取的時候從loading中取【重點:失效、移除Key、失效后需要獲取新值】
                .expireAfterWrite(5, TimeUnit.MINUTES)
                //初始容量
                .initialCapacity(10)
                //用來控制cache的最大緩存數量
                .maximumSize(150)
        );
        return cacheManager;
    }
}
package com.xfgg.demo.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisPassword;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

//生成的redis連接
public class RedisConfig<GenericObjectPoolConfig> {
    @Value("${spring.redis1.host}")
    private String host;
    @Value("${spring.redis1.port}")
    private Integer port;
    @Value("${spring.redis1.password}")
    private String password;
    @Value("${spring.redis1.database}")
    private Integer database;

    @Value("${spring.redis1.lettuce.pool.max-active}")
    private Integer maxActive;
    @Value("${spring.redis1.lettuce.pool.max-idle}")
    private Integer maxIdle;
    @Value("${spring.redis1.lettuce.pool.max-wait}")
    private Long maxWait;
    @Value("${spring.redis1.lettuce.pool.min-idle}")
    private Integer minIdle;


    @Bean
    public RedisStandaloneConfiguration redis1RedisConfig() {
        RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
        config.setHostName(host);
        config.setPassword(RedisPassword.of(password));
        config.setPort(port);
        config.setDatabase(database);
        return config;
    }
    //配置序列化器
    @Bean
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
        RedisTemplate<String,Object>template=new RedisTemplate<>();
        //關聯
        template.setConnectionFactory(factory);
        //設置key的序列化器
        template.setKeySerializer(new StringRedisSerializer());
        //設置value的序列化器
        template.setValueSerializer(new StringRedisSerializer());
        return template;
    }
}

一個使用cacheable注解,一個使用redistemplate進行緩存

感謝各位的閱讀!關于“SpringBoot+SpringCache實現兩級緩存的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平阳县| 赤水市| 灌云县| 尚义县| 聂拉木县| 长白| 二连浩特市| 嵊泗县| 长丰县| 石台县| 满城县| 博乐市| 广南县| 博兴县| 舟山市| 疏附县| 商城县| 博乐市| 淄博市| 朝阳区| 上林县| 古交市| 濮阳县| 滨海县| 文昌市| 江孜县| 方正县| 万安县| 三亚市| 吕梁市| 涡阳县| 金寨县| 大石桥市| 凤庆县| 清徐县| 涿鹿县| 左权县| 阿拉善左旗| 吴江市| 常熟市| 皋兰县|