Spring Boot集成redis
1. 引入依赖
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
2. 配置application.properties
#redis配置
#Redis数据库索引(默认为0)
spring.redis.database=0
spring.redis.host=localhost
spring.redis.port=6379
#Redis服务器连接密码(默认为空)
spring.redis.password=
其中spring.redis.database的配置通常使用0即可,Redis在配置的时候可以设置数据库数量,默认为16,可以理解为数据库的schema
3. 测试字符串值
@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisApplicationTest {
@Resource
private StringRedisTemplate stringRedisTemplate;
@Test
public void testStringValue(){
String key = "appkey";
stringRedisTemplate.opsForValue().set(key, "lolwwssyyzzcc");
String value = stringRedisTemplate.opsForValue().get(key);
System.out.println(value);
Assert.assertEquals("lolwwssyyzzcc", value);
}
}
StringRedisTemplate对象进行Redis的读写操作,该对象从命名中就可注意到支持的是String类型
4. 在redis中存储对象
Redis配置
@Configuration
public class RedisConfiguration {
@Bean
public JedisConnectionFactory jedisConnectionFactory(){
return new JedisConnectionFactory();
}
//支持存储对象
@Bean
public RedisTemplate<String, String> redisTemplate(){
RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(jedisConnectionFactory());
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
//设置value以json类型进行序列化
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//设置key以String类型进行序列化
redisTemplate.setKeySerializer(stringRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
自定义RedisTemplate,配置key和value的序列号方式,key以string类型序列号,value以json类型序列号
注意: 存储的对象需要实现序列化接口
测试
@Test
public void testObjectValue(){
String key = "student";
Student student = new Student();
student.setId(1001);
student.setName("Kiana");
student.setSex("man");
redisTemplate.opsForValue().set(key, student);
Student value = (Student) redisTemplate.opsForValue().get(key);
System.out.println("id:" + value.getId() + "; name:" + value.getName() + "; ses:" + value.getSex());
Assert.assertEquals(true, redisTemplate.hasKey(key));
}
注意:
\xac\xed\x00\x05t\x00\a
在存储对象时,如果在Redis端出现key前面带有\xac\xed\x00\x05t\x00\a,无法获在Redis端获取到value时(通过程序获取没有影响),原因是自定义RedisTemplate,我们不仅需要配置value的序列化方式.还需要配置key的序列化方式
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//设置key以String类型进行序列化
redisTemplate.setKeySerializer(stringRedisSerializer);