pom配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置文件引入redis配置
spring :
redis :
host : 172.16.100.65
database : 0
port : 6379
password : 123456
lettuce :
pool :
max-active : 8
max-wait : -1
max-idle : 8
min-idle : 0
timeout : 10000
RedisConfig配置类
package com. fuzamei. bonuspoint. configuration;
import com. fasterxml. jackson. annotation. JsonAutoDetect;
import com. fasterxml. jackson. annotation. PropertyAccessor;
import com. fasterxml. jackson. databind. ObjectMapper;
import org. springframework. boot. autoconfigure. condition. ConditionalOnClass;
import org. springframework. boot. autoconfigure. data. redis. RedisProperties;
import org. springframework. boot. context. properties. EnableConfigurationProperties;
import org. springframework. cache. CacheManager;
import org. springframework. cache. annotation. CachingConfigurerSupport;
import org. springframework. cache. annotation. EnableCaching;
import org. springframework. cache. interceptor. KeyGenerator;
import org. springframework. cache. interceptor. SimpleKeyGenerator;
import org. springframework. context. annotation. Bean;
import org. springframework. context. annotation. Configuration;
import org. springframework. data. redis. cache. RedisCacheConfiguration;
import org. springframework. data. redis. cache. RedisCacheManager;
import org. springframework. data. redis. connection. RedisConnectionFactory;
import org. springframework. data. redis. connection. lettuce. LettuceConnectionFactory;
import org. springframework. data. redis. core. RedisOperations;
import org. springframework. data. redis. core. RedisTemplate;
import org. springframework. data. redis. core. StringRedisTemplate;
import org. springframework. data. redis. serializer. *;
import com. alibaba. fastjson. JSON;
import com. alibaba. fastjson. serializer. SerializerFeature;
import java. nio. charset. Charset;
import java. lang. reflect. Method;
import java. time. Duration;
import java. util. HashMap;
import java. util. HashSet;
import java. util. Map;
import java. util. Set;
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public RedisSerializer< Object> jackson2JsonRedisSerializer ( ) {
Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer ( Object. class ) ;
ObjectMapper mapper = new ObjectMapper ( ) ;
mapper. setVisibility ( PropertyAccessor. ALL, JsonAutoDetect. Visibility. ANY) ;
mapper. enableDefaultTyping ( ObjectMapper. DefaultTyping. NON_FINAL) ;
serializer. setObjectMapper ( mapper) ;
return serializer;
}
@Bean
public RedisTemplate< String, Object> redisTemplate ( LettuceConnectionFactory lettuceConnectionFactory) {
RedisTemplate< String, Object> template = new RedisTemplate < > ( ) ;
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer ( ) ;
template. setKeySerializer ( stringRedisSerializer) ;
template. setHashKeySerializer ( stringRedisSerializer) ;
template. setDefaultSerializer ( jackson2JsonRedisSerializer ( ) ) ;
template. setConnectionFactory ( lettuceConnectionFactory) ;
template. afterPropertiesSet ( ) ;
return template;
}
@Bean
public StringRedisTemplate stringRedisTemplate ( LettuceConnectionFactory lettuceConnectionFactory) {
StringRedisTemplate template = new StringRedisTemplate ( ) ;
template. setConnectionFactory ( lettuceConnectionFactory) ;
return template;
}
@Override
@Bean
public KeyGenerator keyGenerator ( ) {
return new SimpleKeyGenerator ( ) {
@Override
public Object generate ( Object target, Method method, Object. . . params) {
StringBuilder sb = new StringBuilder ( ) ;
sb. append ( target. getClass ( ) . getName ( ) ) ;
sb. append ( "." ) . append ( method. getName ( ) ) ;
StringBuilder paramsSb = new StringBuilder ( ) ;
for ( Object param : params) {
if ( param != null) {
paramsSb. append ( param. toString ( ) ) ;
}
}
if ( paramsSb. length ( ) > 0 ) {
sb. append ( "_" ) . append ( paramsSb) ;
}
return sb. toString ( ) ;
}
} ;
}
@Bean
public CacheManager cacheManager ( LettuceConnectionFactory lettuceConnectionFactory) {
RedisCacheConfiguration config = RedisCacheConfiguration. defaultCacheConfig ( ) ;
config = config. entryTtl ( Duration. ofMinutes ( 1 ) )
. serializeKeysWith ( RedisSerializationContext. SerializationPair. fromSerializer ( new StringRedisSerializer ( ) ) )
. serializeValuesWith ( RedisSerializationContext. SerializationPair. fromSerializer ( jackson2JsonRedisSerializer ( ) ) )
. disableCachingNullValues ( ) ;
Set< String> cacheNames = new HashSet < > ( ) ;
cacheNames. add ( "company_goods_info" ) ;
Map< String, RedisCacheConfiguration> configMap = new HashMap < > ( ) ;
configMap. put ( "company_goods_info" , config) ;
RedisCacheManager cacheManager = RedisCacheManager. builder ( lettuceConnectionFactory)
. initialCacheNames ( cacheNames)
. withInitialCacheConfigurations ( configMap)
. build ( ) ;
return cacheManager;
}
}
应用
@Override
@Cacheable ( value = "company_goods_info" , key = "'company_goods_info_'+#companyId" )
public ResponseVO getCompanyGoodsInfo ( Long companyId) {
log. info ( "未使用缓存" ) ;
CompanyGoodsInfoDTO companyGoodsInfoDTO = goodDao. companyGoodsInfo ( companyId) ;
return new ResponseVO ( CommonResponseEnum. QUERY_SUCCESS, companyGoodsInfoDTO) ;
}
测试
@Test
public void cacheTest ( ) {
goodService. getCompanyGoodsInfo ( 5 L) ;
goodService. getCompanyGoodsInfo ( 5 L) ;
goodService. getCompanyGoodsInfo ( 4 L) ;
goodService. getCompanyGoodsInfo ( 4 L) ;
}
运行结果