成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java 實(shí)現(xiàn)Redis存儲(chǔ)復(fù)雜json格式數(shù)據(jù)并返回給前端

瀏覽:148日期:2022-08-29 09:13:18

問(wèn)題背景

在Java Web項(xiàng)目中,經(jīng)常需要前端請(qǐng)求數(shù)據(jù),后臺(tái)從數(shù)據(jù)庫(kù)中查詢并計(jì)算最后返回json格式數(shù)據(jù)給前端。

而每次請(qǐng)求都需要計(jì)算一次可能比較浪費(fèi)時(shí)間,這時(shí)我們可以將計(jì)算好的結(jié)果保存在redis中,下次請(qǐng)求時(shí)先判斷redis中是否已經(jīng)存在,如果是則直接從redis里取出返回,因?yàn)槭窃趦?nèi)存中,所以比較快。

而自己在項(xiàng)目中遇到的json格式數(shù)據(jù)比較復(fù)雜,下面記錄一下redis存儲(chǔ)對(duì)象和json格式數(shù)據(jù)的幾種方式以及遇到的問(wèn)題。

存儲(chǔ)方式

1. 直接使用String存儲(chǔ)

String類型是Redis中最簡(jiǎn)單的類型了,每個(gè)key對(duì)應(yīng)一個(gè)String,我們可以直接將要存儲(chǔ)的對(duì)象轉(zhuǎn)換成json字符串,代碼如下:

//存儲(chǔ) 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的相關(guān)函數(shù)toJSONString將對(duì)象轉(zhuǎn)換為字符串進(jìn)行存儲(chǔ)。獲取的時(shí)候直接返回json字符串給前端就可以了。使用這種方式可能只能存儲(chǔ)簡(jiǎn)單的json字符串,對(duì)于復(fù)雜格式的可能會(huì)解析錯(cuò)誤。

2. 使用對(duì)象序列化方式存儲(chǔ)

先將對(duì)象以字節(jié)序列化存儲(chǔ),然后再反序列化得到對(duì)象,這里可以封裝一個(gè)序列化和反序列化的工具類:

import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;public class SerializeUtil { /* * 序列化 * */ public static byte[] serizlize(Object object){ ObjectOutputStream oos = null; ByteArrayOutputStream baos = null; try { baos = new ByteArrayOutputStream(); oos = new ObjectOutputStream(baos); oos.writeObject(object); byte[] bytes = baos.toByteArray(); return bytes; } catch (Exception e) { e.printStackTrace(); }finally { try {if(baos != null){ baos.close();}if (oos != null) { oos.close();} } catch (Exception e2) {e2.printStackTrace(); } } return null; } /* * 反序列化 * */ public static Object deserialize(byte[] bytes){ ByteArrayInputStream bais = null; ObjectInputStream ois = null; try{ bais = new ByteArrayInputStream(bytes); ois = new ObjectInputStream(bais); return ois.readObject(); }catch(Exception e){ e.printStackTrace(); }finally { try { } catch (Exception e2) {e2.printStackTrace(); } } return null; }}

相應(yīng)存儲(chǔ)和獲取代碼如下:

public static void setObject(String key,Object object){ Jedis jedis = RedisConnection.getJedis(); jedis.set(key.getBytes(), SerializeUtil.serizlize(object)); jedis.close(); } public static Object getObject(String key){ Jedis jedis = RedisConnection.getJedis(); byte[] bytes = jedis.get(key.getBytes()); jedis.close(); return SerializeUtil.deserialize(bytes); }

使用這種方式可能遇到嵌套的對(duì)象或者json數(shù)組等不太好解決。

3. 使用hash存儲(chǔ)

第三種方式也是解決我問(wèn)題的一種方式,由于我的json格式數(shù)據(jù)比較復(fù)雜,形如:

{ 'cd': [{'Condition': {...}, segs:[1,2,3]}, { }, ...] 'rs': {'way': '休寧路', 'road':[{},{},..], 'segList': [{object}, {}, ...] }}

我剛開(kāi)始是直接使用fastjson將其轉(zhuǎn)換為字符串進(jìn)行存儲(chǔ),但在返回解析時(shí)發(fā)現(xiàn)格式不太對(duì)了。分析其原因可能是json格式太復(fù)雜,然后使用redis中hash方式將數(shù)據(jù)進(jìn)行分割存儲(chǔ),即cd對(duì)應(yīng)一個(gè)key存儲(chǔ),rs為一個(gè)key進(jìn)行存儲(chǔ),將這兩部分都放入一個(gè)hash中。

相應(yīng)代碼如下:

Jedis jedis = RedisConnection.getJedis();JSONObject res = new JSONObject(); //最終結(jié)果//如果redis中存在,則直接從redis中取,否則計(jì)算并存儲(chǔ)至redisif(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(); //候選結(jié)果集轉(zhuǎn)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);

我是以路名(lm)作為hash的key,首先判斷是否存在該key,不存在的話先進(jìn)行計(jì)算res = computeRes(lm);,得到上述的json格式數(shù)據(jù),然后使用hset方法將其分別作為兩個(gè)key進(jìn)行存儲(chǔ)。注意上述cd為一個(gè)JSONArray對(duì)象,需要使用調(diào)用toJSONString()方法轉(zhuǎn)換成字符串,而rs為一個(gè)JSONObject對(duì)象,使用的是JSON.toJSONString。

在獲取時(shí)首先分別獲取其字符串形式,然后分別轉(zhuǎn)換成相應(yīng)的類型JSONArray.parseArray(cd_value)和JSONObject.parseObject(rs_value),最終包裹在一個(gè)JSONObject中。

以上這篇Java 實(shí)現(xiàn)Redis存儲(chǔ)復(fù)雜json格式數(shù)據(jù)并返回給前端就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
日韩精品一区二区三区视频播放| 蜜臀av亚洲一区中文字幕| 亚洲精品中文在线观看| 国产成人自拍网| 国产精品亚洲欧美| 正在播放亚洲一区| 午夜在线成人av| 在线播放不卡| 久久人人97超碰com| 经典三级视频一区| 欧美一级网站| 国产精品你懂的| 国产91在线|亚洲| 在线观看网站黄不卡| 亚洲美女电影在线| 91视视频在线观看入口直接观看www| 日本高清不卡在线观看| 中文字幕五月欧美| 99久久精品国产导航| 91精品国产综合久久精品app| 亚洲h精品动漫在线观看| 亚洲一级网站| 国产午夜精品久久久久久久| 福利一区二区在线观看| 欧美日产在线观看| 青草av.久久免费一区| 亚洲综合社区| 亚洲精品日产精品乱码不卡| 韩国在线一区| xf在线a精品一区二区视频网站| 美国一区二区三区在线播放| 伊人久久亚洲热| 国产精品你懂的在线欣赏| 91欧美一区二区| 久久亚洲综合av| 国产一二三精品| 欧美亚洲国产bt| 日韩高清在线不卡| 亚洲欧美日本视频在线观看| 樱桃视频在线观看一区| 91麻豆精品秘密| 日韩欧美国产一二三区| 美女视频网站久久| 色噜噜偷拍精品综合在线| 亚洲福利视频三区| 亚洲一区三区电影在线观看| 夜夜嗨av一区二区三区| 亚洲国内欧美| 亚洲视频一区在线观看| 日韩一级免费| 亚洲欧美乱综合| 合欧美一区二区三区| 2021国产精品久久精品| 99久久99久久久精品齐齐| 26uuu亚洲| 欧美精品一区二区三区在线看午夜 | 中文字幕va一区二区三区| 欧美在线高清| 亚洲欧美在线另类| 一区二区av| 日韩精品电影在线| 欧美色综合天天久久综合精品| 精品一区二区三区香蕉蜜桃| 欧美一区二区人人喊爽| 高清不卡在线观看av| 91精品中文字幕一区二区三区| 国产91清纯白嫩初高中在线观看| 精品美女在线播放| 欧美一区影院| 国产精品网曝门| 最新亚洲一区| 亚洲va天堂va国产va久| 欧美午夜在线观看| 国产不卡高清在线观看视频| 欧美不卡在线视频| 91浏览器入口在线观看| 久久久久久久久久久久电影 | 一区二区三区四区五区在线| 亚洲国产精品一区二区久久 | 国产乱码精品一品二品| 日韩精品中文字幕一区二区三区| 91免费国产视频网站| 亚洲伦理在线精品| 日本二三区不卡| 国内久久精品视频| 日韩欧美自拍偷拍| 欧美黄在线观看| 中文字幕一区二区视频| 久久久久高清| 高清成人免费视频| 国产精品欧美经典| 国产精品亚洲一区| 免费xxxx性欧美18vr| 欧美一卡二卡三卡四卡| 成人性生交大片| 国产精品久久影院| 久久福利精品| 国产精品一区二区在线播放| 久久影院午夜论| 国产精品久久777777毛茸茸| 日本va欧美va精品| 国产午夜一区二区三区| 在线视频亚洲| 国模娜娜一区二区三区| 日本一区二区综合亚洲| 亚洲综合不卡| 高清不卡在线观看| 亚洲欧美综合在线精品| 蜜桃视频一区| 国产精品羞羞答答xxdd| 国产精品久久久久久久久果冻传媒 | 日韩午夜中文字幕| 99久久久国产精品免费蜜臀| 亚洲国产精品久久艾草纯爱| 欧美精品vⅰdeose4hd| 91色在线porny| 国产精品一区二区在线观看网站| 久久av二区| 成人高清免费在线播放| 青青草成人在线观看| 中文字幕av资源一区| 欧美一区日韩一区| 麻豆久久婷婷| 欧美日韩精选| 国产成人精品三级麻豆| 午夜在线成人av| 国产精品国产成人国产三级| 欧美一区中文字幕| 美日韩免费视频| 激情综合久久| 99综合影院在线| 国产乱子伦视频一区二区三区| 一区2区3区在线看| 久久亚洲一区二区三区四区| 欧美亚洲国产bt| 性一交一乱一区二区洋洋av| 欧美日韩国产高清视频| 国产91丝袜在线播放0| 国精产品一区一区三区mba桃花| 亚洲国产一区二区a毛片| 国产日韩欧美麻豆| 日韩亚洲欧美综合| 欧美色视频一区| 久久久久久久久久久久久久一区| 狠久久av成人天堂| 欧美精品三区| 97精品电影院| 成人午夜视频免费看| 日韩成人免费电影| 亚洲色图.com| 国产日韩v精品一区二区| 精品日韩一区二区三区| 91麻豆精品国产91久久久更新时间| 久久狠狠久久综合桃花| 亚洲高清不卡| 欧美1区2区3区| 成人黄色小视频| 国产精品综合视频| 国产在线播放一区三区四| 激情久久久久久久久久久久久久久久| 日日夜夜免费精品| 天天操天天色综合| 亚洲第一搞黄网站| 亚洲精品免费播放| 中文无字幕一区二区三区| 精品国产乱码久久久久久蜜臀 | 日韩毛片在线免费观看| 国产偷国产偷亚洲高清人白洁| 337p日本欧洲亚洲大胆色噜噜| 91精品国产色综合久久ai换脸 | 在线天堂一区av电影| 伊人精品成人久久综合软件| av在线不卡电影| 成人av资源站| 丁香六月综合激情| 国产91丝袜在线播放0| 国产精品影音先锋| 国产成人aaaa| 成人中文字幕合集| 成人精品一区二区三区四区| 国产成人自拍在线| 国产成人精品1024| 国产91精品在线观看| 国产精品一级黄| 成人免费高清视频在线观看| 福利一区福利二区| 成a人片亚洲日本久久| 粉嫩av一区二区三区粉嫩| 国产尤物一区二区在线| 国产高清无密码一区二区三区| 国产成人免费视频网站 | 亚洲成人中文在线| 婷婷亚洲久悠悠色悠在线播放| 亚洲成人综合在线| 麻豆精品国产91久久久久久| 精品中文字幕一区二区 | 精品动漫一区| 国产精品亚洲综合| 色综合久久久久综合体桃花网| 一本一道综合狠狠老|