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

SpringBoot2整合Redis緩存三步驟代碼詳解

 更新時間:2020年03月04日 09:33:36   作者:趙小胖0914  
這篇文章主要介紹了SpringBoot2整合Redis緩存三步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

遵循SpringBoot三板斧

第一步加依賴

<!-- Redis -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- redis依賴commons-pool 這個依賴一定要添加 -->
<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-pool2</artifactId>
  <version>2.6.0</version>
</dependency>

第二步寫注解

@EnableCaching//開啟緩存支持

第三步寫配置

spring:
 redis:
  database: 0
  host: 192.168.1.11
  port: 6379
  password:
  timeout: 600
  lettuce:
   pool:
    max-active: 50
    max-wait: -1
    max-idle: 8
    min-idle: 0

編寫Redis配置類

/**
 * @Author: zc
 * @Date: 2019/11/3 14:12
 * @Description: SpringBoot2.0 Redis緩存配置
 * @EnableCaching:開啟緩存支持
 */
@Slf4j
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {

  @Value("${sys.dataCaching.expireTime:0}")
  private int expireTime;

  @Resource
  private LettuceConnectionFactory lettuceConnectionFactory;

  @Override
  @Bean
  public KeyGenerator keyGenerator() {//設(shè)置自定義key{ClassName + methodName + params}
    return (target, method, params) -> {
      StringBuilder sb = new StringBuilder();
      sb.append(target.getClass().getName());
      sb.append(",Method:");
      sb.append(method.getName());
      sb.append(",Params[");
      for (int i = 0; i < params.length; i++) {
        sb.append(params[i].toString());
        if (i != (params.length - 1)) {
          sb.append(",");
        }
      }
      sb.append("]");
      log.debug("Data Caching Redis Key : {}", sb.toString());
      return sb.toString();
    };
  }
  //自定義keyGenerator,Key生成器
  @Bean
  public KeyGenerator updateByIdkeyGenerator() {
    return (target, method, params) -> {
      StringBuilder sb = new StringBuilder();
      sb.append(target.getClass().getName());
      sb.append(",Method:");
      sb.append("getById");
      sb.append(",Params[");
      try {
        Field id = params[0].getClass().getDeclaredField("id");
        id.setAccessible(true);
        sb.append(id.get(params[0]).toString());
      } catch (IllegalAccessException e) {
        e.printStackTrace();
      } catch (NoSuchFieldException e) {
        e.printStackTrace();
      }
      sb.append("]");
      log.debug("Data Caching Redis Key : {}", sb.toString());
      return sb.toString();
    };
  }
  //自定義keyGenerator,Key生成器
  @Bean
  public KeyGenerator deleteByIdkeyGenerator() {
    return (target, method, params) -> {
      StringBuilder sb = new StringBuilder();
      sb.append(target.getClass().getName());
      sb.append(",Method:");
      sb.append("getById");
      sb.append(",Params[");
      for (int i = 0; i < params.length; i++) {
        sb.append(params[i].toString());
        if (i != (params.length - 1)) {
          sb.append(",");
        }
      }
      sb.append("]");
      log.debug("Data Caching Redis Key : {}", sb.toString());
      return sb.toString();
    };
  }
  

  @Bean
  public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
    RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
    //設(shè)置緩存過期時間
    if (expireTime > 0) {
      log.info("Redis 緩存過期時間 : {}", expireTime);
      //設(shè)置緩存有效期 秒
      redisCacheConfiguration.entryTtl(Duration.ofSeconds(expireTime));
    } else {
      log.info("Redis 未設(shè)置緩存過期時間");
    }
    return RedisCacheManager
        .builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory))
        .cacheDefaults(redisCacheConfiguration).build();
  }

  @Bean
  public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {//創(chuàng)建RedisTemplate
    // 設(shè)置序列化
    Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(
        Object.class);
    ObjectMapper om = new ObjectMapper();
    om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
    om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    jackson2JsonRedisSerializer.setObjectMapper(om);
    // 配置redisTemplate
    RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
    redisTemplate.setConnectionFactory(lettuceConnectionFactory);
    RedisSerializer<?> stringSerializer = new StringRedisSerializer();
    // key序列化
    redisTemplate.setKeySerializer(stringSerializer);
    // value序列化
    redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
    // Hash key序列化
    redisTemplate.setHashKeySerializer(stringSerializer);
    // Hash value序列化
    redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
    redisTemplate.afterPropertiesSet();
    return redisTemplate;
  }
}

如何使用查詢緩存

@CacheConfig(cacheNames = "demoDao")
@Component
public class DemoDao implements IDemoDAO<> {
  @Autowired
  DemoMapper mapper;

  //用默認配置的keyGenerator
  @Cacheable
  @Override
  public Demo getById(Integer id) {
    return mapper.getById(id);
  }
  //使用配置的keyGenerator,清空緩存
  @CacheEvict(keyGenerator = "updateByIdkeyGenerator")
  @Override
  public int update(T entity) {
    return mapper.update(entity);
  }
  //使用配置的keyGenerator,清空緩存
  @CacheEvict(keyGenerator = "deleteByIdkeyGenerator")
  @Override
  public int deleteById(Integer id) {
    return mapper.deleteById(id);
  }
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用maven打包/跳過某個modules

    使用maven打包/跳過某個modules

    本文總結(jié)了在Maven項目中跳過或單獨構(gòu)建模塊的方法,包括使用`-pl`、`-am`和`-amd`參數(shù)來選擇性地執(zhí)行模塊構(gòu)建,以及通過`-Dmaven.test.skip`跳過測試,以提高構(gòu)建效率
    2024-12-12
  • SpringBoot自定義轉(zhuǎn)換器應(yīng)用實例講解

    SpringBoot自定義轉(zhuǎn)換器應(yīng)用實例講解

    SpringBoot在響應(yīng)客戶端請求時,將提交的數(shù)據(jù)封裝成對象時,使用了內(nèi)置的轉(zhuǎn)換器,SpringBoot 也支持自定義轉(zhuǎn)換器,這個內(nèi)置轉(zhuǎn)換器在 debug的時候,可以看到,提供了124個內(nèi)置轉(zhuǎn)換器
    2022-08-08
  • 一文搞懂hashCode()和equals()方法的原理

    一文搞懂hashCode()和equals()方法的原理

    這篇文章主要介紹了詳解hashCode()和equals()的本質(zhì)區(qū)別和聯(lián)系,本文先對兩種方法作了介紹,然后對二者聯(lián)系進行分析,具有一定參考價值,需要的朋友可以了解下
    2020-06-06
  • 基于JavaSwing+mysql開發(fā)一個學生社團管理系統(tǒng)設(shè)計和實現(xiàn)

    基于JavaSwing+mysql開發(fā)一個學生社團管理系統(tǒng)設(shè)計和實現(xiàn)

    項目使用Java swing+mysql開發(fā),可實現(xiàn)基礎(chǔ)數(shù)據(jù)維護、用戶登錄注冊、社團信息列表查看、社團信息添加、社團信息修改、社團信息刪除以及退出注銷等功能、界面設(shè)計比較簡單易學、適合作為Java課設(shè)設(shè)計以及學習技術(shù)使用,需要的朋友參考下吧
    2021-08-08
  • springboot使用小工具之Lombok、devtools、Spring Initailizr詳解

    springboot使用小工具之Lombok、devtools、Spring Initailizr詳解

    這篇文章主要介紹了springboot使用小工具之Lombok、devtools、Spring Initailizr詳解,Lombok可以代替手寫get、set、構(gòu)造方法等,需要idea裝插件lombok,本文通過示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-10-10
  • 深入理解Java中的String(示例詳解)

    深入理解Java中的String(示例詳解)

    文章詳細介紹了Java中String類的特點、用途、主要方法以及常見用法,String類是不可變的,具有字符串常量池,特定的內(nèi)存結(jié)構(gòu),并隨JDK版本更新而優(yōu)化,它廣泛用于表示和處理文本數(shù)據(jù),并在內(nèi)存管理和性能優(yōu)化方面表現(xiàn)出色,感興趣的朋友一起看看吧
    2025-03-03
  • MyBatis幾種不同類型傳參的方式總結(jié)

    MyBatis幾種不同類型傳參的方式總結(jié)

    這篇文章主要介紹了MyBatis幾種不同類型傳參的方式總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 解決IDEA項目external libraries依賴包消失的問題

    解決IDEA項目external libraries依賴包消失的問題

    有時候電腦重啟后,再打開IDEA上的項目時會出現(xiàn)external libraries目錄下的依賴包都消失了的情況,只剩下了一個JDK的包,本文給大家介紹了解決IDEA項目external libraries依賴包消失的辦法,需要的朋友可以參考下
    2024-02-02
  • 到底如何設(shè)置Java線程池的大小的方法示例

    到底如何設(shè)置Java線程池的大小的方法示例

    在我們?nèi)粘I(yè)務(wù)開發(fā)過程中,或多或少都會用到并發(fā)的功能。那么并發(fā)線程池到底設(shè)置多大呢?文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • Servlet系列兩種創(chuàng)建方式

    Servlet系列兩種創(chuàng)建方式

    本文主要介紹了Servlet系列兩種創(chuàng)建方式,包含Servlet2.5之前使用和Servlet3.0后,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-02-02

最新評論

于都县| 蒙自县| 大埔区| 金秀| 三亚市| 岑巩县| 仙居县| 西安市| 兴和县| 舒兰市| 皮山县| 青河县| 文昌市| 临城县| 镇宁| 科技| 闻喜县| 闵行区| 桐柏县| 富宁县| 黄陵县| 新建县| 平原县| 舟曲县| 阳新县| 大英县| 中西区| 治县。| 兴宁市| 聂拉木县| 修武县| 蕲春县| 嵊泗县| 东平县| 稻城县| 通海县| 平山县| 敦化市| 招远市| 道孚县| 忻城县|