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);