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

springboot如何開啟緩存@EnableCaching(使用redis)

 更新時間:2024年11月07日 16:19:10   作者:阿勝yss  
在Spring Boot項目中集成Redis主要包括添加依賴到pom.xml、配置application.yml中的Redis連接參數(shù)、編寫配置類、在啟動類上添加@EnableCaching注解以及測試接口的查詢和緩存驗證等步驟,首先,需要在pom.xml中添加spring-boot-starter-data-redis依賴

添加依賴 pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

application.yml 配置redis連參數(shù)

spring:
  # redis 配置
  redis:
    # 地址
    host: 127.0.0.1
    # 端口,默認(rèn)為6379
    port: 6379
    # 數(shù)據(jù)庫索引
    database: 2
    # 密碼
    password:
    # 連接超時時間
    timeout: 10s

配置類

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.cache.RedisCacheWriter;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;

import java.time.Duration;
import java.util.HashMap;
import java.util.Map;


@Configuration
public class CacheConfig {

    /**
     * 最新版,設(shè)置redis緩存過期時間
     */
    @Bean
    public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
        return new RedisCacheManager(
                RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory),
                this.getRedisCacheConfigurationWithTtl( 60) // 默認(rèn)策略,未配置的 key 會使用這個
        );
    }

    private RedisCacheConfiguration getRedisCacheConfigurationWithTtl(Integer seconds) {
        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
        redisCacheConfiguration = redisCacheConfiguration.serializeValuesWith(
                RedisSerializationContext
                        .SerializationPair
                        .fromSerializer(jackson2JsonRedisSerializer)
        ).entryTtl(Duration.ofSeconds(seconds));
        return redisCacheConfiguration;
    }

}

啟動類上 加 @EnableCaching 注解

測試

1.接口查詢

2. 緩存查詢驗證

@ApiOperation(value = "根據(jù)ID獲取詳情",notes = "查詢")
@Cacheable(cacheNames = "testaCache", key = "#id")
@RequestMapping(value = "/get/{id}",method = RequestMethod.GET)
public TestA get(@PathVariable Long id){
    log.info("進行了mysql查詢");
    return testService.getById(id);
}
 @GetMapping("/get/redis/cache")
 @ApiOperation(value="查看redis緩存信息")
 public String getRedisCache(){
 	// 從IOC容器中通過類型獲取bean  
     RedisCacheManager redisCacheManager = SpringUtils.getBean(RedisCacheManager.class);
     // 從IOC容器中通過名稱獲取bean
     RedisCacheManager redisCacheManager2 = SpringUtils.getBean("cacheManager");
     Cache demoCache = redisCacheManager.getCache("testaCache");
     log.info(demoCache.get(78, TestA.class)+"");
     return demoCache.getName();
 }

SpringUtils.class

import org.springframework.aop.framework.AopContext;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@Component
public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationContextAware 
{
    /** Spring應(yīng)用上下文環(huán)境 */
    private static ConfigurableListableBeanFactory beanFactory;

    private static ApplicationContext applicationContext;

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException 
    {
        SpringUtils.beanFactory = beanFactory;
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException 
    {
        SpringUtils.applicationContext = applicationContext;
    }

    /**
     * 獲取對象
     *
     * @param name
     * @return Object 一個以所給名字注冊的bean的實例
     * @throws BeansException
     *
     */
    @SuppressWarnings("unchecked")
    public static <T> T getBean(String name) throws BeansException
    {
        return (T) beanFactory.getBean(name);
    }

    /**
     * 獲取類型為requiredType的對象
     *
     * @param clz
     * @return
     * @throws BeansException
     *
     */
    public static <T> T getBean(Class<T> clz) throws BeansException
    {
        T result = (T) beanFactory.getBean(clz);
        return result;
    }

    /**
     * 如果BeanFactory包含一個與所給名稱匹配的bean定義,則返回true
     *
     * @param name
     * @return boolean
     */
    public static boolean containsBean(String name)
    {
        return beanFactory.containsBean(name);
    }

    /**
     * 判斷以給定名字注冊的bean定義是一個singleton還是一個prototype。 如果與給定名字相應(yīng)的bean定義沒有被找到,將會拋出一個異常(NoSuchBeanDefinitionException)
     *
     * @param name
     * @return boolean
     * @throws NoSuchBeanDefinitionException
     *
     */
    public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException
    {
        return beanFactory.isSingleton(name);
    }

    /**
     * @param name
     * @return Class 注冊對象的類型
     * @throws NoSuchBeanDefinitionException
     *
     */
    public static Class<?> getType(String name) throws NoSuchBeanDefinitionException
    {
        return beanFactory.getType(name);
    }

    /**
     * 如果給定的bean名字在bean定義中有別名,則返回這些別名
     *
     * @param name
     * @return
     * @throws NoSuchBeanDefinitionException
     *
     */
    public static String[] getAliases(String name) throws NoSuchBeanDefinitionException
    {
        return beanFactory.getAliases(name);
    }

    /**
     * 獲取aop代理對象
     * 
     * @param invoker
     * @return
     */
    @SuppressWarnings("unchecked")
    public static <T> T getAopProxy(T invoker)
    {
        return (T) AopContext.currentProxy();
    }

    /**
     * 獲取當(dāng)前的環(huán)境配置,無配置返回null
     *
     * @return 當(dāng)前的環(huán)境配置
     */
    public static String[] getActiveProfiles()
    {
        return applicationContext.getEnvironment().getActiveProfiles();
    }

    /**
     * 獲取配置文件中的值
     *
     * @param key 配置文件的key
     * @return 當(dāng)前的配置文件的值
     *
     */
    public static String getRequiredProperty(String key)
    {
        return applicationContext.getEnvironment().getRequiredProperty(key);
    }
}

總結(jié)

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

相關(guān)文章

  • Java NIO無法綁定指定IP和端口解決方案

    Java NIO無法綁定指定IP和端口解決方案

    這篇文章主要介紹了Java NIO無法綁定指定IP和端口解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • Java+Swing實現(xiàn)醫(yī)院管理系統(tǒng)的完整代碼

    Java+Swing實現(xiàn)醫(yī)院管理系統(tǒng)的完整代碼

    這篇文章主要介紹了Java+Swing實現(xiàn)醫(yī)院管理系統(tǒng)的完整代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • 在Java的Hibernate框架中使用SQL語句的簡單介紹

    在Java的Hibernate框架中使用SQL語句的簡單介紹

    這篇文章主要介紹了在Java的Hibernate框架中使用SQL語句的方法,Hibernate是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2016-01-01
  • java ReentrantLock條件鎖實現(xiàn)原理示例詳解

    java ReentrantLock條件鎖實現(xiàn)原理示例詳解

    這篇文章主要為大家介紹了java ReentrantLock條件鎖實現(xiàn)原理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • SpringBoot集成OAuth2實現(xiàn)安全認(rèn)證與授權(quán)的實踐

    SpringBoot集成OAuth2實現(xiàn)安全認(rèn)證與授權(quán)的實踐

    本文主要介紹了SpringBoot集成OAuth2實現(xiàn)安全認(rèn)證與授權(quán)的實踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-03-03
  • JavaFX如何獲取ListView(列表視圖)的選項

    JavaFX如何獲取ListView(列表視圖)的選項

    這篇文章主要介紹了JavaFX如何獲取ListView(列表視圖)的選項,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 一文帶你了解Spring中@Enable開頭注解的使用

    一文帶你了解Spring中@Enable開頭注解的使用

    前面的文章給大家介紹?Spring?的重試機制的時候有提到過?Spring?有很多?@Enable?開頭的注解,平時在使用的時候也沒有注意過為什么會有這些注解,今天就給大家介紹一下
    2022-09-09
  • springboot項目實現(xiàn)斷點續(xù)傳功能

    springboot項目實現(xiàn)斷點續(xù)傳功能

    這篇文章主要介紹了springboot項目實現(xiàn)斷點續(xù)傳,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • JAVA 深層拷貝 DeepCopy的使用詳解

    JAVA 深層拷貝 DeepCopy的使用詳解

    最近需要用到比較兩個對象屬性的變化,其中一個是oldObj,另外一個是newObj,oldObj是newObj的前一個狀態(tài),所以需要在newObj的某個狀態(tài)時,復(fù)制一個一樣的對象,由于JAVA不支持深層拷貝,因此專門寫了一個方法
    2013-07-07
  • SpringBoot啟動后的初始化數(shù)據(jù)加載原理解析與實戰(zhàn)

    SpringBoot啟動后的初始化數(shù)據(jù)加載原理解析與實戰(zhàn)

    本文主要圍繞?Spring?Boot?啟動后的初始化數(shù)據(jù)加載展開,介紹了初始化任務(wù)的基本需求,包括全局配置加載、數(shù)據(jù)庫表初始化等,闡述了多種初始化加載方式,分析了它們的優(yōu)缺點,需要的朋友可以參考下
    2024-11-11

最新評論

胶州市| 霍城县| 马尔康县| 辽宁省| 南召县| 区。| 长子县| 维西| 班戈县| 赤壁市| 永丰县| 巴林左旗| 双鸭山市| 林西县| 绥德县| 益阳市| 富顺县| 依安县| 荣成市| 平泉县| 内江市| 寿阳县| 田阳县| 晋城| 自贡市| 江源县| 南溪县| 通榆县| 望谟县| 文水县| 湘阴县| 斗六市| 普陀区| 舞阳县| 澳门| 松溪县| 泰州市| 襄垣县| 庆云县| 丘北县| 宝山区|