1、添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
2、编写配置类
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory){
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
//默认的Key序列化器为:JdkSerializationRedisSerializer
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(connectionFactory);
return redisTemplate;
}
}
3、添加Redis配置
4、启动类添加开启缓存注解支持
5、现在我们就可以在项目中使用Redis了。SpringBoot帮我们针对缓存的操作做了封装,我们可以直接使用注解来快速方便的使用redis,常用的有如下3个注解:
@Cacheable | 使用缓存 |
@CachePut | 更新缓存 |
@CacheEvict | 清理缓存 |
他们的参数基本都是一样的,只是功能有所不同,拿 @Cacheable 举例,他们的功能及参数如下:
参数 介绍 样例 value或cacheNames 缓存名,用于区分不同的模块;在redis中的区别就是key前缀会增加 缓存名
@Cacheable(value="mycache")
key 缓存的key,可以为空;需要指定key可以使用 SpEL
表达式编写;不指定则默认按照方法的所有参数进行组合
@Cacheable(value="testcache",key="#userName")
@Cacheable(value="testcache",key="#root.methodName")
condition 缓存的条件,可以为空;使用 SpEL
编写,返回true则缓存数据@Cacheable(value="testcache",condition="#userName.length()>2")
例:
为了方便获取入参中的数据,在参数key中的SpEL表达式中,SpringBoot默认提供了一个root对象。使用及解释见下表:
样例 | 解释 |
---|---|
#root.methodName | 当前被调用的方法名 |
#root.method | 当前被调用的方法 |
#root.target | 当前被调用的目标对象 |
#root.targetClass | 当前被调用的目标对象类 |
6、虽然SpringBoot提供了非常方便的注解供我们使用,但是请注意,由于注解的实现原理是通过代理对象来实现的,所以在同一个类中自己的方法A调用带缓存注解的方法B,此时注解是不会生效的,也就是缓存不会生效。那么有时候我们实际业务确实有这种需求怎么办?我们可以直接在类中注入SpringBoot提供的模板类来对redis进行操作。
@Autowired
private RedisTemplate redisTemplate;
7、Redis常见的五大数据类型
String(字符串) 、list(列表)、set(集合)、hash(散列)、Zset(有序集合)
//1、操作字符串
redisTemplate.opsForValue();
//2、操作hash
redisTemplate.opsForHash();
//3、操作list
redisTemplate.opsForList();
//4、操作set
redisTemplate.opsForSet();
//5、操作有序set
redisTemplate.opsForZSet();
这样我们就实现了对缓存的操作,具体的方法操作非常简单易懂,网上资料也很多,这里就不过多赘述。