狂神说springboot
SpringBoot集成Redis
-
导入依赖
1
2
3
4<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency> -
配置redis
1
2
3# 配置redis
spring.redis.host=127.0.0.1
spring.redis.port=6379 -
测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class SpringbootRedis01ApplicationTests {
private RedisTemplate redisTemplate;
void contextLoads() {
//redisTemplate
//opsForValue(): 类似Redis的string
//opsForList(): 操作list 、ops:操作
//opsForSet()
//opsForHash()
//opsForZset()
//opsForGeo()
//opsForHyperLogLog()
//除了基本的操作,常用的方法也可以操作,包括事务:multi/exec/discard,和基本的CRUD
//获取connection连接,操作Redis数据库 flushDb flushAll
// RedisConnection connection = redisTemplate.getConnectionFactory().getConnection();
// connection.flushDb();
redisTemplate.opsForValue().set("mykey","hardy");
System.out.println(redisTemplate.opsForValue().get("mykey"));
}
} -
出现问题,存入redis数据库的数据有转义字符

-
查看错误原因
-
默认的序列化方式是JDK序列化

-
想要避免错误,就要编写自己的redisTemplate,更换序列化方式
-
编写RedisTemplate
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public class RedisConfig {
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)throws UnknownHostException {
//我们为了自己开发方便,直接使用<String, Object>类型
RedisTemplate<String, Object> template = new RedisTemplate<>();
// 默认的连接配置
template.setConnectionFactory(redisConnectionFactory);
// 序列化配置
// new 一个Jackson序列化对象,用于后面的设置
Jackson2JsonRedisSerializer<Object> JsonSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
// 使用ObjectMapper 进行转义
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
//转义完才能使用
JsonSerializer.setObjectMapper(objectMapper);
// 创建string的序列化
StringRedisSerializer stringSerializer = new StringRedisSerializer();
// string的key和hash的key都采用string的序列化
// value都采用Jackson的序列化
//key采用string序列化方式
template.setKeySerializer(stringSerializer );
//hash的key采用string序列化方式
template.setHashKeySerializer(stringSerializer );
//value采用Jackson序列化方式
template.setValueSerializer(JsonSerializer );
//hash的value采用Jackson序列化方式
template.setHashValueSerializer(JsonSerializer );
template.afterPropertiesSet();
return template;
}
} -
注入可能失败

-
-
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小蜗!
评论
ValineDisqus


