1.引入pom
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
2.application.yml
spring: redis: #数据库索引 database: 0 host: 127.0.0.1 port: 6379 password: 123456 jedis: pool: #最大连接数 max-active: 8 #最大阻塞等待时间(负数表示没限制) max-wait: -1 #最大空闲 max-idle: 8 #最小空闲 min-idle: 0 #连接超时时间 timeout: 10000
3.RedisConfig.java
/** * Redis缓存配置类 * @author szekinwin * */ @Configuration @EnableCaching public class RedisConfig extends CachingConfigurerSupport { //缓存管理器 @Bean public CacheManager cacheManager(RedisConnectionFactory connectionFactory) { //user信息缓存配置 RedisCacheConfiguration userCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(10)).disableCachingNullValues().prefixKeysWith("user"); Map<String, RedisCacheConfiguration> redisCacheConfigurationMap = new HashMap<>(); redisCacheConfigurationMap.put("user", userCacheConfiguration); //初始化一个RedisCacheWriter RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory); // 设置CacheManager的值序列化方式为JdkSerializationRedisSerializer,但其实RedisCacheConfiguration默认就是使用StringRedisSerializer序列化key,JdkSerializationRedisSerializer序列化value,所以以下注释代码为默认实现 // ClassLoader loader = this.getClass().getClassLoader(); // JdkSerializationRedisSerializer jdkSerializer = new JdkSerializationRedisSerializer(loader); // RedisSerializationContext.SerializationPair<Object> pair = RedisSerializationContext.SerializationPair.fromSerializer(jdkSerializer); // RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(pair); RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig(); //设置默认超过期时间是30秒 defaultCacheConfig.entryTtl(Duration.ofSeconds(30)); //初始化RedisCacheManager RedisCacheManager cacheManager = new RedisCacheManager(redisCacheWriter, defaultCacheConfig, redisCacheConfigurationMap); return cacheManager; } }
3.UserService.java
@Service public class UserService { @Autowired StringRedisTemplate stringRedisTemplate; @Autowired RedisTemplate redisTemplate; @Cacheable(value = "user", key ="#id", unless = "#result==null") public String getUser(int id) { System.out.println("i am from userService"); System.out.println(stringRedisTemplate.getValueSerializer()); System.out.println(redisTemplate.getValueSerializer()); return "fee"; } }
4.UserController.java
@RestController public class UserController { @Autowired UserService userService; @GetMapping("getUser") public String getUser() { return userService.getUser(001); } }
5.访问 http://127.0.0.1:8080/getUser