Reids概述:redis是一个基于内存的单线程高性能key—value型数据库。读写性能优异,支持丰富的数据类型,包括String(字符串)、list(链表)、set(集合)、zset(有序集合)、hash(哈希类型)
第一步、我们安装redis。地址Releases · microsoftarchive/redis · GitHub
第二步,在springboot中引入依赖
<!--集成redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
第三步、添加redis配置信息,在application.properties文件中添加如下信息:
spring:
redis: # redis配置
database: 0 # Redis数据库索引(默认为0)
host: localhost
port: 6379
timeout: 5000 # ms
password: 123456
第三步、测试用例开发
package com.example.demo;
import com.example.demo.model.AyUser;
import com.example.demo.service.AyUserService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import javax.annotation.Resource;
import java.util.List;
@SpringBootTest
public class RedisTests {
@Resource
private RedisTemplate redisTemplate;
@Resource
private AyUserService ayUserService;
private static final String ALL_USER = "ALL_USER_LIST";
/**
* 测试redis
*/
@Test
public void testRedis() {
// Key: name, value: ay
redisTemplate.opsForValue().set("names", "ay");
String name = (String)redisTemplate.opsForValue().get("names");
System.out.println(name);
AyUser ayUser = new AyUser();
ayUser.setId("8");
ayUser.setName("小花");
redisTemplate.opsForValue().set("uu", ayUser);
AyUser user = (AyUser)redisTemplate.opsForValue().get("uu");
List<AyUser> all = ayUserService.findAll();
redisTemplate.delete(ALL_USER);
redisTemplate.opsForList().leftPushAll(ALL_USER,all);
List<AyUser> range = redisTemplate.opsForList().range(ALL_USER, 0, -1);
}
}
RedisTemplate是Spring Data Redis为我们提供用来操作redist数据库的模板类。Spring会为我们初始化这个类,通过@Resource注解注入即可使用。
当我们把数据存到redis的时候,都是通过Spring提供的Serializer序列化到数据库的。
RedisTemplate默认使用JdkSerializationRedisSerializer它不能序列化对象、我们可以修改它的序列化方式,用来完成对象的序列化
package com.example.common.redis;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig {
/**
*
* 自定义RedisTemplate的序列化方式
* @param
* @return
*/
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
RedisTemplate redisTemplate = new RedisTemplate();
//设置连接方式
redisTemplate.setConnectionFactory(factory);
// 使用Jackson2JsonRedisSerialize 替换默认序列化
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.activateDefaultTyping(objectMapper.getPolymorphicTypeValidator(),ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.WRAPPER_ARRAY);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
// 设置key的序列化规则和value的序列化规则
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
return redisTemplate;
}
}
到此,springboot集成redis就完成了