最近刚换了一家公司,看了下公司Java后台代码中关于redis存储数据的代码,里面是这样写的:
public void setAttribute(Object key,Object value){
redisTemplate.opsForHash().put(SessionUtil.getToken(),key,value);
}
但是这种写法,一般是不建议去这样写的。因为在存储哈希的时候,会将
{
id:"0001",
name:"ande",
position:{
lat:113.88988,
lon:257289
}
}
这种数据转化为
{
id:"0001",
name:"ande",
position:[object,object]
}
这种格式,当然在取出来的时候就会造成转为实体类的麻烦。
Redis中的哈希不是用来存储临时数据的,想要存储数据还是要用redis的String类型,不然在取数据转化为实体类的时候会报错。将String存入进去可以保证存进去的什么样子,取出来之后还是什么样子。因此在实际的开发过程中,如果想将一个实体类的json形式存储到redis中,一般要这样写:
redisTemplate.opsForValue().set(redisKey, JSON.toJSONString(vvModel, SerializerFeature.DisableCircularReferenceDetect), 1, TimeUnit.DAYS);
然后取出数据的时候,一般来这样取:
String redisStr = stringRedisTemplate.opsForValue().get(redisKey);
如果还想将这个取出来的String转化为我们想要的实体类,可以使用
VendorVideoModel vvModel = JSON.parseObject(redisStr, VendorVideoModel.class);
这样写。
注意:我用的是com.alibaba.fastjson的JSON类去进行String和实体类转化的。