来源
https://blog.csdn.net/yeahPeng11/article/details/121015739
我的代码
pom.xml
<!-- 添加 Redis依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
application.properties
# Redis
spring.redis.host=ip
spring.redis.port=6379
spring.redis.database=1
spring.redis.timeout=3000
spring.cache.redis.time-to-live=3600000 #缓存时间
redisConfig
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.lang.reflect.Method;
import java.util.Arrays;
@EnableCaching
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(factory);
// 还可以设置其他信息
return redisTemplate;
}
/**
* 自定义key生成策略
*
* @return
*/
@Bean
@Override
public KeyGenerator keyGenerator() {
return new KeyGenerator() {
public Object generate(Object target, Method method, Object... objects) {
StringBuilder sb = new StringBuilder();
Cacheable annotation = method.getAnnotation(Cacheable.class);
String[] cacheNames = annotation.cacheNames();
for (String elem : cacheNames) {
sb.append(elem + ".");
}
sb.deleteCharAt(sb.length() - 1); // 删除掉 cacheNames 中的最后一个点(.)
sb.append("::").append(target.getClass()
.getSimpleName()).append("::")
.append(method.getName()).append("::")
.append(Arrays.toString(objects));
return sb.toString();
}
};
}
}
缓存的对象实现序列化
public class Instrumentdto implements Serializable {
.......
}
最后一步
controller添加 @Cacheable
@PostMapping("/queryInstrumentByCondition")
@Cacheable(key = "#param", value = "instrumentdto")
public Result<List<Instrumentdto>> QueryInstrumentByCondition(@RequestBody TInstrumentInfo param){
return futuresService.QueryInstrumentByCondition(param);
}
key可以根据你传的不同参数进行缓存