Java中Redis存儲復雜json格式數據


1.直接使用String存儲

  可以直接將要存儲的對象轉換成json字符串,代碼如下:       

//存儲
public static void setJsonString(String key, Object obj) {
    Jedis jedis = RedisConnection.getJedis();
    jedis.set(key, JSON.toJSONString(obj));
    jedis.close();
}
//獲取
public static String getJsonString(String key) {
    Jedis jedis = RedisConnection.getJedis();
    String value = jedis.get(key);
    jedis.close();
    return value;
}

弊端:

這里是使用fastjson的相關函數toJSONString將對象轉換為字符串進行存儲。獲取的時候直接返回json字符串給前端就可以了。使用這種方式可能只能存儲簡單的json字符串,對於復雜格式的可能會解析錯誤。

2.使用對象序列化方式存儲

先將對象以字節序列化存儲,然后再反序列化得到對象:

 

3. 使用hash存儲

形如:

{
"cd": [{"Condition": {...}, segs:[1,2,3]}, { }, ...]
"rs": {"way": "休寧路", "road":[{},{},..], "segList": [{object}, {}, ...] }
}
Jedis jedis = RedisConnection.getJedis();
JSONObject res = new JSONObject();    //最終結果
//如果redis中存在,則直接從redis中取,否則計算並存儲至redis
if(jedis.exists(lm)) {
    String rs_value = jedis.hget(lm, "rs");
    String cd_value = jedis.hget(lm, "cd");
    res.put("cd", JSONArray.parseArray(cd_value));
    res.put("rs", JSONObject.parseObject(rs_value));
    System.out.println("redis get success");
} else {
    res = computeRes(lm);
    //更新redis
    jedis.hset(lm, "cd", res.getJSONArray("cd").toJSONString());
    jedis.hset(lm, "rs", JSON.toJSONString(res.getJSONObject("rs")));
    System.out.println("redis set success");
}
jedis.close();
        
//候選結果集轉json字符串
String jsonStr = JSON.toJSONString(res, SerializerFeature.DisableCircularReferenceDetect);
//返回給前端
System.out.println("json string: " + jsonStr);
response.setContentType("text/html;charset=utf-8");  //解決前端中文亂碼
PrintWriter out = response.getWriter();
out.print(jsonStr);

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM