首先說明,樣例的項目全做的查詢操作,所以沒有去介紹其他的幾個註解
首先引入springboot 整合redis的jar包依賴
<!-- 把springboot版本說明-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--這個纔是主角-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
其次 上配置文件
spring:
redis:
host: 127.0.0.1
database: 0
port: 6383
password: xxxxx
# 連接超時時間(毫秒)
timeout: 5000
jedis:
pool:
# 連接池最大連接數(使用負值表示沒有限制)
max-active: 10
# 連接池最大阻塞等待時間(使用負值表示沒有限制)
max-wait: -1
# 連接池中的最大空閒連接
max-idle: 5
# 連接池中的最小空閒連接
min-idle: 0
接着,上配置類
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
private static final Logger logger = LoggerFactory.getLogger(RedisConfig.class);
@Bean
public RedisCacheConfiguration redisCacheConfiguration(){
return RedisCacheConfiguration
.defaultCacheConfig()
.entryTtl(Duration.ofHours(8))
.serializeKeysWith(RedisSerializationContext
.SerializationPair
.fromSerializer(new StringRedisSerializer()))
.serializeValuesWith(RedisSerializationContext
.SerializationPair
.fromSerializer(new GenericJackson2JsonRedisSerializer()));
}
@Override
@Bean
public CacheErrorHandler errorHandler() {
// 異常處理,當Redis發生異常時,打印日誌,但是程序正常走
logger.info("初始化 -> [{}]", "Redis CacheErrorHandler");
return new CacheErrorHandler() {
@Override
public void handleCacheGetError(RuntimeException e, Cache cache, Object key) {
logger.error("Redis occur handleCacheGetError:key -> [{}]", key, e);
}
@Override
public void handleCachePutError(RuntimeException e, Cache cache, Object key, Object value) {
logger.error("Redis occur handleCachePutError:key -> [{}];value -> [{}]", key, value, e);
}
@Override
public void handleCacheEvictError(RuntimeException e, Cache cache, Object key) {
logger.error("Redis occur handleCacheEvictError:key -> [{}]", key, e);
}
@Override
public void handleCacheClearError(RuntimeException e, Cache cache) {
logger.error("Redis occur handleCacheClearError:", e);
}
};
}
}
這裏上面註釋了@Configuration,需要被@SpringBootApplication註解掃到,不然這個配置就等於沒作用,至於怎麼讓它被掃描到,可以把這個配置文件放到低於Application啓動類低一個level的package裏面
eg
|-- src/main/java/com.xxx.xx/config/RedisConfig.java
|-- src/main/java/com.xxx.xx/Application.java
四部曲已經到了最後一步,那就是使用舉例
@Service
@CacheConfig(cacheNames = {"base-info"}) //這個是對每個類都有一個分層
public class BaseInfoServiceImpl implements IBaseInfoService {
// 這裏全部都是查詢,所以使用了@Cachable註解,至於用於更新和刪除的註解可以自行百度,很簡單
@Override
@Cacheable(key = "targetClass + methodName")
public xxxDTO getDto() {
return xxx;
}
}
最後,當然是看效果這裏推薦使用Redis Desktop Mananger 看效果
如果覺得JSON形式的序列化和反序列化效率低,想使用二進制的,可以使用Kryo序列化方式,只需要上面的RedisConfig中
.serializeValuesWith(RedisSerializationContext
.SerializationPair
.fromSerializer(new GenericJackson2JsonRedisSerializer()));
// 修改new GenericJackson2JsonRedisSerializer() 替換爲其他的