1. 程式人生 > 其它 >Springboot整合Redis應用

Springboot整合Redis應用

依賴:

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

 

application配置檔案:

# redis配置
# 指定redis的主機地址
spring.redis.host=192.168.159.128   // 這個是redis的執行主機地址,本機配置的就是本機地址,虛擬機器配置的就是虛擬機器地址
#logging.level.com.example.demo_crud.mapper=debug
#debug=true
# Redis伺服器連線密碼(預設為空)
spring.redis.password=
# 連線池最大連線數(使用負值表示沒有限制)
spring.redis.jedis.pool.max-active=8
# 連線池最大阻塞等待時間(使用負值表示沒有限制)
spring.redis.jedis.pool.max-wait=-1ms
# 連線池中的最大空閒連線
spring.redis.jedis.pool.max-idle=8
# 連線池中的最小空閒連線
spring.redis.jedis.pool.min-idle=0
# 連線超時時間(毫秒)
spring.redis.timeout=5000
# Redis資料庫索引(預設為0)
spring.redis.database=0

  

新建RedisConfig配置檔案進行redis序列化配置:

/**
 * @Author: L
 * @Date: 2022/3/30 13:26
 * @Description: *
 */
@Configuration
public class RedisConfig {
    @Bean
    public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
        //初始化一個RedisCacheWriter
        RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory);
        //設定CacheManager的值序列化方式為json序列化
        RedisSerializer<Object> jsonSerializer = new GenericJackson2JsonRedisSerializer();
        RedisSerializationContext.SerializationPair<Object> pair = RedisSerializationContext.SerializationPair
                .fromSerializer(jsonSerializer);
        RedisCacheConfiguration defaultCacheConfig=RedisCacheConfiguration.defaultCacheConfig()
                .serializeValuesWith(pair);
        //設定預設超過期時間是30秒
        defaultCacheConfig.entryTtl(Duration.ofSeconds(30));
        //初始化RedisCacheManager
        return new RedisCacheManager(redisCacheWriter, defaultCacheConfig);
    }
}

  

對比較常用的資料查詢操作增加redis快取:

// getall 獲取所有商品資料
public List<Goods> getAll() {
// 將返回商品陣列轉換為jsonString
String goodsliststring = JSON.toJSONString(goodsMapper.getAll());
// 歲redis資料庫進行KV操作
ValueOperations<String, String> valueops = redisTemplate.opsForValue();
// 將所有商品資料放入快取
valueops.set(goodsListKey,goodsliststring);
// 獲取redis資料庫中的資料
String goodsListJson = valueops.get(goodsListKey);
// 判斷redis中是否有資料,如果有資料直接在redis中拿,沒有則去資料庫查詢
if(!StringUtils.isEmpty(goodsListJson)){
return goodsMapper.getAll();
}
return goodsMapper.getAll();
}

  

在進行更新或者刪除操作時加上對redis的清除操作,實現redis快取的清除更新:

// 根據ID刪除資料庫中資訊
public boolean deleteById(int id){
  // 自己定義需要的redis清除快取操作
redisTemplate.delete(redisTemplate.keys("goods*")); // 刪除正則匹配goods*系列key的快取
boolean flag = false;
try{
userMapper.deleteById(id);
flag = true;
}catch (Exception e){
e.printStackTrace();
}
return flag;
}