欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

spring-data-redis 2.0 的使用示例代碼

 更新時間:2019年01月20日 10:26:19   作者:夢見山  
這篇文章主要介紹了spring-data-redis 2.0 的使用示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在使用Spring Boot2.x運行Redis時,發(fā)現(xiàn)百度不到順手的文檔,搞通后發(fā)現(xiàn)其實這個過程非常簡單和簡潔,覺得有必要拿出來分享一下。

Spring Boot2.x 不再使用Jedis,換成了Lettuce。Lettuce是基于 Netty 實現(xiàn)的,所以性能更好。但是我看到很多文章居然在Spring Boot 2.x還在寫Jedis的配置。

依賴

依賴比較簡單,spring-boot-starter-data-redis、commons-pool2 即可。

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


    <!--spring2.0集成redis所需common-pool2-->
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-pool2</artifactId>
      <version>2.4.2</version>
    </dependency>

屬性配置

在屬性中配置Redis Server的訪問地址、密碼、數(shù)據(jù)庫,并配置連接池的屬性。

 redis:
  #  reids的連接ip
  host: 127.0.0.1
  port: 6379
  password: helloworld
  
  # Redis默認情況下有16個分片,這里配置具體使用的分片,默認是0
  database: 0
  
  # 連接超時時間(毫秒)
  timeout: 10000ms
  
  # redis client配置,使用lettuce
  lettuce:
   pool:
    # 連接池中的最小空閑連接 默認 0
    min-idle: 0
    # 連接池最大阻塞等待時間(使用負值表示沒有限制) 默認 -1
    max-wait: 1000ms
    # 連接池最大連接數(shù)(使用負值表示沒有限制) 默認 8
    max-active: 8
    # 連接池中的最大空閑連接 默認 8
    max-idle: 8

注解配置

全局使能緩存

@EnableSwagger2     // 使用swagger api 功能
@EnableCaching      // 使用緩存
@SpringBootApplication
public class Starter {

  public static void main(String[] args) {
    SpringApplication.run(Starter.class, args);
  }
}

通過注解使用緩存,@Cacheable 將獲取值存入緩存

  /**
   * 基于id 獲取用戶信息
   */
  @Cacheable(value="user", key="#id", unless="#result == null")
  public UserDTO GetUserById(int id) {
    User userEntity = userMapper.getUserByID(id);
    if (userEntity == null){
      return null;
    }

    /* entity 轉 DTO */
    UserDTO userDTO = new UserDTO();
    userDTO.setAge(userEntity.getAge());
    userDTO.setId(id);
    userDTO.setName(userEntity.getName());
    userDTO.setCreateTime(unixTime2String(userEntity.getCreateTime()));
    userDTO.setPhone(userEntity.getPhone());
    userDTO.setEmail(userEntity.getEmail());
    return userDTO;
  }

@CachePut 更新緩存

  @CachePut(value = "user", key="#p0.id")
  public UserDTO updateUser(InputUserInfoDTO inputUserInfoDTO){
    userMapper.updateUser(inputUserInfoDTO.getId(), inputUserInfoDTO.getName(), inputUserInfoDTO.getAge());
    User userEntity = userMapper.getUserByID(inputUserInfoDTO.getId());/* entity 轉 DTO */

    if (null == userEntity){
      return null;
    }
    UserDTO userDTO = new UserDTO();
    userDTO.setAge(userEntity.getAge());
    userDTO.setId(userEntity.getId());
    userDTO.setName(userEntity.getName());
    userDTO.setCreateTime(unixTime2String(userEntity.getCreateTime()));
    userDTO.setPhone(userEntity.getPhone());
    userDTO.setEmail(userEntity.getEmail());
    return userDTO;
  }

@CacheEvict 刪除緩存

  @CacheEvict(value = "user", key="#id")
  public void deleteUser(int id){
    userMapper.deleteUser(id);
  }

當然為了支持序列化,我的UserDTO得implements Serializable

@Data
public class UserDTO implements Serializable {
//public class UserDTO implements Serializable {
  private int id;
  private String name;
  private int age;
  private String createTime;
  private String phone;
  private String email;
}

至此緩存已經(jīng)可以用起來了,不需要編寫RedisConfig代碼,有點小遺憾,直接去Redis查看數(shù)據(jù),發(fā)現(xiàn)是亂碼。這是因為我使用的是Java自帶的序列化,如果要更換Redis序列化方法,就要重寫RedisConfig了。

RedisConfig

這個配置也不復雜,使用Jackson2JsonRedisSerializer將對象轉換為Json串,注意這里一定要使用ObjectMapper,否則再將json串反序列化為對象時會報。

@Configuration
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
public class RedisConfig extends CachingConfigurerSupport{

  @Bean
  public CacheManager cacheManager(RedisConnectionFactory factory) {
    RedisSerializer<String> redisSerializer = new StringRedisSerializer();
    Jackson2JsonRedisSerializer 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 config = RedisCacheConfiguration.defaultCacheConfig()
                      .entryTtl(Duration.ZERO)
                      .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
                      .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
                      .disableCachingNullValues();

    RedisCacheManager cacheManager = RedisCacheManager.builder(factory).cacheDefaults(config).build();
    return cacheManager;
  }
}

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

相關文章

  • springboot+mybatis-plus+oracle實現(xiàn)邏輯刪除

    springboot+mybatis-plus+oracle實現(xiàn)邏輯刪除

    最近在做一個前后端分離的小項目,需要刪除用戶表的用戶,本文主要實現(xiàn)了springboot+mybatis-plus+oracle邏輯刪除,具有一定的參考價值,感興趣的可以了解一下
    2021-08-08
  • SpringBoot執(zhí)行有返回值的異步任務問題

    SpringBoot執(zhí)行有返回值的異步任務問題

    這篇文章主要介紹了SpringBoot執(zhí)行有返回值的異步任務問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • java隨機生成8位數(shù)授權碼的實例

    java隨機生成8位數(shù)授權碼的實例

    下面小編就為大家?guī)硪黄猨ava隨機生成8位數(shù)授權碼的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Java利用Zxing生成二維碼的簡單實例

    Java利用Zxing生成二維碼的簡單實例

    下面小編就為大家?guī)硪黄狫ava利用Zxing生成二維碼的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • Springcloud整合stream,rabbitmq實現(xiàn)消息驅動功能

    Springcloud整合stream,rabbitmq實現(xiàn)消息驅動功能

    官方定義SpringCloud?Stream?是一個構建消息驅動微服務的框架。我們只需要搞清楚如何與Spring?Cloud?Stream?交互就可以方便使用消息驅動的方式。本文將通過Springcloud整合stream,rabbitmq實現(xiàn)消息驅動功能,需要的可以參考一下
    2022-02-02
  • Springboot傳參詳解

    Springboot傳參詳解

    這篇文章主要介紹了Springboot傳參的相關知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-11-11
  • Java多線程并發(fā)之ReentrantLock

    Java多線程并發(fā)之ReentrantLock

    這篇文章主要介紹了Java?多線程并發(fā)ReentrantLock,文中有非常詳細的代碼示例,對正在學習java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2023-04-04
  • java的接口解耦方式

    java的接口解耦方式

    這篇文章主要介紹了java的接口解耦方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 一文詳解Java線程的6種狀態(tài)與生命周期

    一文詳解Java線程的6種狀態(tài)與生命周期

    一個線程在給定的時間點只能處于一種狀態(tài)。線程可以有6種狀態(tài):New、Runnable、Blocked、Waiting、Timed?waiting和Terminated。本文將詳細講解這6種狀態(tài),需要的可以參考一下
    2022-05-05
  • Java SpringBoot開發(fā)小技巧詳解

    Java SpringBoot開發(fā)小技巧詳解

    這篇文章主要介紹了淺談SpringBoot項目如何讓前端開發(fā)提高效率(小技巧),主要介紹了Swagger和Nginx提高效率的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評論