关于向redis中存储数据的问题

最近刚换了一家公司,看了下公司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和实体类转化的。

你可能感兴趣的:(关于向redis中存储数据的问题)