关于SpringBoot中redis的存取问题

解决项目中遇到的问题。

问题

存没有问题,有的数据采用set方法,有的数据保存到redis的list中,采用leftPush方法

1
redisTemplate.opsForValue().set(key, value);
1
redisTemplate.opsForList().leftPush(key, val);

问题在于取,若取和存在同一个类或者方法中,就可以实现,但是理论上,只有存到了redis数据库,在其他地方也是可以取到的,但返回的都是null。

解决

之前也遇到过这种问题,当时在controller中可以取到,但在service中就不可以,所以开始也在考虑这个原因。最后发现真正的原因在于取的时候redisTemplate要实现序列化接口。

1
2
3
4
5
6
7
8
9
10
11
12
13
private RedisTemplate<String, String> redis;

@Qualifier("redisTemplate")
@Autowired
public void setRedis(RedisTemplate redis) {
this.redis = redis;
redis.setKeySerializer(new GenericToStringSerializer<Object>(Object.class));
redis.setValueSerializer(new GenericToStringSerializer<Object>(Object.class));
}
public void getPackage() throws Exception {
redis.opsForValue().get("xxxxx");
redis.opsForList().rightPop("xxxxx");
}

这样就可以实现。

:转载文章请注明出处,谢谢~