文章目录
一、添加Maven依赖
Spring Data为Redis专门的提供了从 Spring 应用程序轻松配置和访问 Redis 的功能。所以在Maven依赖中,Redis是以spring-boot-starter-data作为前缀。下面是Redis的Maven依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
如果将bean对象直接存入Redis中,Redis中的bean很可能会是乱码。为了预防这个问题的出现,本章提供的是Jackon给对象进行序列化来解决此问题。下面是Jackson的Maven依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
二、application配置
以下是部分Reids参数的配置,如果您需要查看更全的参数,可以查看RedisProperties源码,RedisProperties类中的每一个成员都是一个参数。
#这个是yml配置
spring:
redis:
host: 127.0.0.1 #链接Redis的IP地址
port: 6379 #链接Redis的端口号
#这个是properties配置
spring.redis.host=127.0.0.1
spring.redis.port=6379
三、Jackson序列化器配置到RedisTemplate中
RedisTemplate类的功能:1、给定对象和底层二进制数据之间执行自动序列化/反序列化。2、对Redis进行各种数据访问存储操作。
在使用默认的RedisTemplate的情况下,bean对象存入到Redis中是乱码,所以这边通过Jackson来给RedisTemplate的键和值进行序列化设置。
@Configurable
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String,Object> template=new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
// 给RedisTemplate的value进行序列化
Jackson2JsonRedisSerializer<Object> objectJackson2JsonRedisSerializer = new
Jackson2JsonRedisSerializer<Object>(Object.class);
ObjectMapper om=new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
objectJackson2JsonRedisSerializer.setObjectMapper(om);
// 给RedisTemplate的key进行序列化
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
template.setKeySerializer(stringRedisSerializer);
template.setHashKeySerializer(stringRedisSerializer);
template.setValueSerializer(objectJackson2JsonRedisSerializer);
template.setHashValueSerializer(objectJackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
四、Springboot对Redis的简单操作
以下代码是对Springboot对Redis的简单操作。在运行程序前,要确保redis-server是运行状态。
@SpringBootTest
class SpringbootRedisApplicationTests {
@Autowired
private RedisTemplate redisTemplate;
@Test
void contextLoads() {
Student student=new Student("xiaoming",18);
redisTemplate.opsForValue() .set("student",student);
System.out.println(redisTemplate.opsForValue().get("student"));
}
}
第一次看到redisTemplate的方法可能会有点蒙,这边就简单的讲讲redisTemplate对redis操作的方法。opsForValue方法是针对Redis的字符串操作;opsForList是针对Redis的List数据操作;opsForSet是针对Redis的Set数据进行操作。以此类推。
在实际开发中,每次对Redis进行redisTemplate.opsForXxx.xxx()时,很费时费精力。所以通常情况下,我们自己创建一个RedisUitl来简化Redis数据库的操作。如下代码所示。
@Component
public final class RedisUtil {
@Autowired
private RedisTemplate<String,Object> redisTemplate;
/**
* 指定缓存失效时间
* @param key 建
* @param time 时间(秒)
**/
public boolean expir(String key,long time){
try{
if(time > 0){
redisTemplate.expire(key,time, TimeUnit.SECONDS);
}
return true;
}catch (Exception e){
e.printStackTrace();
return false;
}
}
/**
* 指定缓存失效时间
* @param key 可以传一个至多个值
**/
public void del(String... key){
if(key!=null && key.length>0){
if(key.length == 1){
redisTemplate.delete(key[0]);
}else{
redisTemplate.delete((Collection<String>) CollectionUtils.arrayToList(key));
}
}
}