Redis是一款NOSQL数据库,同时可以充当缓存中间件。在 Spring Boot 中,默认集成的 Redis 就是 Spring Data Redis,默认底层的连接池使用了 lettuce ,开发者可以自行修改为自己的熟悉的,例如 Jedis。
Spring Data Redis 针对 Redis 提供了非常方便的操作模板 RedisTemplate.
基于SpringBoot 2.x版本
- 快速入门
- 开启缓存
一、快速入门
1、创建springboot项目,勾选NOSQL选项下的redis选项,或者在项目创建完毕后再pom中加入依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2、在application.properties文件中加入以下redis配置。
spring.redis.port=6379
spring.redis.host=127.0.0.1
3.创建一个Controller类,其中代码如下,该控制器类会返回JSON数据。
@Autowired
RedisTemplate redisTemplate;
@ResponseBody
@RequestMapping("/rt")
public String redis(){
ValueOperations ops= redisTemplate.opsForValue();
ops.set("one","成功!");
Object one = ops.get("one");
System.out.println(one.toString());
return one.toString();
}
4.开启redis服务端,找到redis-server.exe,双击开启。
5.在浏览器访问。访问成功后会返回数据到页面上。
二、SpringBoot Data Redis开启缓存
1.加入依赖进入pom文件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.4.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
2.在properties文件中加入redis配置
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.min-idle=0
spring.redis.lettuce.pool.max-idle=8
spring.redis.lettuce.pool.max-wait=10000ms
spring.redis.lettuce.shutdown-timeout=100ms
3.创建实体类User.
public class User {
private Integer id;
private String name;
private String gender;
//toString()省略
public User(Integer id, String name, String gender) {
this.id = id;
this.name = name;
this.gender = gender;
}
public User() {
}
}
4.创建service层,并加入注解@CacheConfig(cacheNames = {"user"})和@Cacheable。
@Service
@CacheConfig(cacheNames = {"user"})
public class UserService {
@Cacheable
public User findUser() {
System.out.println("无缓存时执行下面代码,获取zhangsan,Time:");
return new User(1, "Dave", "male");// 模拟从持久层获取数据
}
}
5.创建RedisCacheConfig 类,配置redis。
@Configuration
@EnableCaching
public class RedisCacheConfig extends CachingConfigurerSupport {
// 自定义key生成器
@Bean
public KeyGenerator keyGenerator(){
return (o, method, params) ->{
StringBuilder sb = new StringBuilder();
sb.append(o.getClass().getName()); // 类目
sb.append(method.getName()); // 方法名
for(Object param: params){
sb.append(param.toString()); // 参数名
}
return sb.toString();
};
}
// 配置缓存管理器
@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofSeconds(60)) // 60s缓存失效
// 设置key的序列化方式
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(keySerializer()))
// 设置value的序列化方式
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(valueSerializer()))
// 不缓存null值
.disableCachingNullValues();
RedisCacheManager redisCacheManager = RedisCacheManager.builder(connectionFactory)
.cacheDefaults(config)
.transactionAware()
.build();
return redisCacheManager;
}
/* @Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory){
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(connectionFactory);
redisTemplate.setKeySerializer(keySerializer());
redisTemplate.setHashKeySerializer(keySerializer());
redisTemplate.setValueSerializer(valueSerializer());
redisTemplate.setHashValueSerializer(valueSerializer());
logger.info("序列化完成!");
return redisTemplate;
}*/
// key键序列化方式
private RedisSerializer<String> keySerializer() {
return new StringRedisSerializer();
}
// value值序列化方式
private GenericJackson2JsonRedisSerializer valueSerializer(){
return new GenericJackson2JsonRedisSerializer();
}
}
6.创建Controller,测试。
@RestController
public class UserController {
@Autowired
UserService userService;
@RequestMapping("/find")
public User findUser(){
System.out.println("....");
return userService.findUser();
}
}
此时缓存已经开启。