引入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.5.1</version>
<type>bundle</type>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.5.0</version>
<type>bundle</type>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.0</version>
<type>bundle</type>
</dependency>
application.yml文件:
spring:
redis:
host: localhost
port: 6379
password:
main方法添加注解:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
@SpringBootApplication
@EnableCaching
public class CachedemoApplication {
public static void main(String[] args) {
SpringApplication.run(CachedemoApplication.class, args);
}
}
缓存配置文件:
package com.example.cachedemo.cache;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CacheConfig;
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.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
@CacheConfig
@Configuration
@EnableCaching
public class RedisConfig2 {
@Bean
public KeyGenerator keyGenerator() {
return new KeyGenerator() {
//为给定的方法及其参数生成一个键
//格式为:com.frog.mvcdemo.controller.FrogTestController-show-[params]
@Override
public Object generate(Object target, Method method, Object... params) {
StringBuffer sb = new StringBuffer();
sb.append(target.getClass().getName());//类名
sb.append("-");
sb.append(method.getName());//方法名
sb.append("-");
for (Object param: params ) {
sb.append(param.toString());//参数
}
return sb.toString();
}
};
}
@Bean
public CacheManager cacheManager(RedisTemplate redisTemplate) {
//初始化一个RedisCacheWriter
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
//设置默认的过期时间(以秒为单位)
cacheManager.setDefaultExpiration(600);
cacheManager.setUsePrefix(true);
//rcm.setExpires();设置缓存区域(按key)的过期时间(以秒为单位)
Map<String,Long> expiresMap=new HashMap<>();
expiresMap.put("cacheTest1",10L);
expiresMap.put("cacheTest2",60 * 5L);
cacheManager.setExpires(expiresMap);
return cacheManager;
}
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
StringRedisTemplate template = new StringRedisTemplate(factory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
service层测试如下:
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
@Service
public class CacheServiceTest {
static {
User user = new User();
user.setLike("哈哈");
user.setName("张三");
user.setPassword("1112");
}
@Cacheable(value = "cacheTest1")
public String getData(String mm){
System.out.println(666);
mm += mm;
return mm;
}
}