一、Spring Boot 集成 Redis
1.1、添加 redis 依赖
或将以下配置添加到 pom.xml中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
1.2、配置 redis
# 基础配置
spring.redis.database=0 # 0也是默认值,表示你要操控的 Redis 上的哪个数据库
spring.redis.port=6379 # 6379也是默认值,表示 Redis 端口
spring.redis.host= # 这里填写你的服务器地址
# 可省略
spring.redis.lettuce.pool.min-idle=5
spring.redis.lettuce.pool.max-idle=10
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.max-wait=1ms
spring.redis.lettuce.shutdown-timeout=100ms
二、 使用 Java 代码操控 Redis
2.1、手动操作 redis
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RedisController {
//引入 redis
@Autowired
private StringRedisTemplate stringRedisTemplate;
/**
* 存储
* @return
*/
@RequestMapping("/set")
public String setRedis() {
//存储 key-value 键值对: "username"-"jaychou"
stringRedisTemplate.opsForValue().set("username", "jaychou");
return "redis 存储成功!";
}
/**
* 读取
* @return
*/
@RequestMapping("/get")
public String getRedis() {
//通过 key 值读取 value
String result = stringRedisTemplate.opsForValue().get("username");
return result;
}
}
执行结果如下:
2.2、使用注解操作 redis
使用注解操作 redis 总共需要两个步骤:
- 在启动类上添加全局注解缓存。
- 使用 @Cacheable 、@CachePut、@CacheEvict 注解操作 Redis。
具体的如下:
首先,在 DemoApplication 类下加注释如下:
@SpringBootApplication
@EnableCaching //开启全局注解缓存
2.2.1、存储缓存
使用 @Cacheable 注解实现缓存的存储和读取,并搭配以下连个属性一起使用
- value: 这个参数是必须要的,是存储缓存数据的包名。
- key: 可选。要使用SpEL表达式("#参数名"表示你要进行缓存的参数,对应方法的形参,"+"是参数之间的分割符),这就表明了你要缓存的数据的 key 值是什么(对应的 value 就是方法的返回值)。
例如我要存储用户名和用户 id 到缓存中
/**
* 存入或读取缓存
* @param id
* @param username
* @return
*/
@RequestMapping("/get")
@Cacheable(value = "spring.cache", key = "#id+#username")
public String get(String id, String username) {
//非空校验
if(!StringUtils.hasLength(id) || !StringUtils.hasLength(username)) {
return null;
}
System.out.println("执行了 get 方法");
return "id: " + id + ", username: " + username;
}
执行后可以观察到缓存已被存入:
2.2.2、读取缓存
实际上读取和存储缓存都是一样的代码,当第一次存储缓存后,再次调用此方法时,就不会调用此方法了,而是直接拿到缓存的数据填充到方法对应的参数中,接着直接执行 return 语句。
怎么证明上述过程呢?再执行一遍刚刚存储(读取)缓存的代码即可,因为刚刚我在代码中加上了打印代码,如果执行了方法,就会打印信息到控制台上,如果是直接从缓存中读取代码,就不会打印信息到控制台上。
2.2.3、更新缓存
使用注解 @CachePut 即可将当前方法的返回值通过对应的 key 更新到缓存中,类似于 java 中 HashMap 的 put 方法,如果当前不存在这个 key,则新增键值对,若存在,则更新对应的 value 值~
如下代码:
/**
* 更新缓存
* 将当前方法的返回值更新到缓存中
* @param id
* @param username
* @return
*/
@RequestMapping("/put")
@CachePut(value = "spring.cache", key = "#id+#username")
public String put(String id, String username) {
//非空校验
if(!StringUtils.hasLength(id) || !StringUtils.hasLength(username)) {
return null;
}
System.out.println("执行了 put 方法");
return "id: " + id + ", username: " + username;
}
2.3.4、删除缓存
使用 @CacheEvict 即可 根据 key 值删除缓存
如下代码:
/**
* 删除缓存
* @param id
* @param username
*/
@RequestMapping("/del")
@CacheEvict(value = "spring.cache", key = "#id+#username")
public void del(String id, String username) {
System.out.println("执行了删除缓存");
}