Springboot整合Redis應用
阿新 • • 發佈:2022-03-30
依賴:
<!-- 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;
}