当用到redis缓存数据库数据时,存的时候,可以是String,可以是处理过的对象,还可以是List集合...,但是在取数据时,作为操作者的你需要对接收到的数据类型做转换,否则类型不一致,影响返回和接收。

类型转换方式一:封装方法
封装关于redis的get方法,通过泛型对值类型进行转换。

//存储时,value为一个对象,返回时,value默认为 object类型,需要进行类型转换
@SuppressWarnings("unchecked")
public static <T> List<T> getList(String key, Class<T> clazz) {
        Object value = redisTemplate.opsForValue().get(key);
        if (value != null) {
            return (List<T>) value;
        }
        return null;
    }

//存储时,value为一个List集合对象,返回时,需要进行类型转换
@SuppressWarnings("unchecked")
public static <T> List<T> get(String key, Class<T> clazz) {
    Object value = redisTemplate.opsForValue().get(key, hashKey);
    if (value != null) {
        return (T) value;
    }
    return null;
}


//调用示例:
//存对象					查询到的一条Person对象数据
redisTemplate.opsForValue().set("zhangsan", Person);

//取 需要接受Person对象类型    	调用自定义的get方法
Person p1 = get("zhangsan", Person.class);

//存List集合对象					查询到的多条条Person对象数据
redisTemplate.opsForValue().set("persons", List<Person>);

//取 需要接收List<Person>类型
List<Person> list = getList("zhangsan", Person.class);
Person p1 = get("zhangsan", Person.class);
可能会有类型转换异常,此时可使用方式二

类型转换方式二:使用JSON

//JsonUtils.toJsonStr(person)作用:将person对象数据转换为json字符转【方法可以网上自行百度(很简单)】
//注意:是转换为JSON字符串,不是通过Person实体类的toString()将其转换为String。此时存进去的value是JSON字符串类型
redisTemplate.opsForValue().set("zhangsan", JSON.toJSONString(person));

//取数据:将JSON字符串转换为指定的java对象接收
String value = redisTemplate.opsForValue().get("zhangsan");
	if(value != null) {
        Person p2= JSONObject.parseObject(value, Person.class); 
        return p2;
两种方法主要提供思路供人参考.......................................
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐