日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

java redis缓存理解_Java项目中使用Redis缓存案例

發(fā)布時(shí)間:2025/3/19 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java redis缓存理解_Java项目中使用Redis缓存案例 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

緩存的目的是為了提高系統(tǒng)的性能,緩存中的數(shù)據(jù)主要有兩種:

1.熱點(diǎn)數(shù)據(jù)。我們將經(jīng)常訪問(wèn)到的數(shù)據(jù)放在緩存中,降低數(shù)據(jù)庫(kù)I/O,同時(shí)因?yàn)榫彺娴臄?shù)據(jù)的高速查詢,加快整個(gè)系統(tǒng)的響應(yīng)速度,也在一定程度上提高并發(fā)量。

2.查詢耗時(shí)的數(shù)據(jù)。如果有一些數(shù)據(jù)查詢十分耗時(shí),那么每次請(qǐng)求這些數(shù)據(jù)時(shí),都去數(shù)據(jù)庫(kù)查詢的話,會(huì)使得系統(tǒng)響應(yīng)速度特別低,數(shù)據(jù)庫(kù)cpu 100%。將這些數(shù)據(jù)放緩存,會(huì)極大提高系統(tǒng)響應(yīng)速度,但同時(shí)數(shù)據(jù)實(shí)時(shí)性較差。

最近工作中有碰到需要使用緩存的情況,場(chǎng)景如下:app端看板統(tǒng)計(jì)數(shù)據(jù)匯總,在打開(kāi)app時(shí)加載看板數(shù)據(jù),匯總數(shù)據(jù)來(lái)源于不同的庫(kù),各個(gè)數(shù)據(jù)的生成接口已經(jīng)寫(xiě)好,只需要去調(diào)用接口整合數(shù)據(jù)返回即可。

具體我們來(lái)看看是怎么實(shí)現(xiàn)的吧。

第一步,取mysql中查詢各個(gè)接口的信息:

getPanelInfo.java

1 /*service代碼略*/

2 List panels = panelService.getAllPanels(); //得到接口的名稱(chēng),接口的url

第二步,根據(jù)拿到的信息生成請(qǐng)求參數(shù):

getPanelInfo.java

1 WrapResponseModel resonseModel = newWrapResponseModel();2 Map headers = new HashMap<>();3 headers.put("username", username);4 headers.put("token",token);5 List content = new ArrayList();6 for(PanelDto panelDto:panel){7 //發(fā)送http請(qǐng)求

8 content.add(HttpRequestUtils.get(panelDto.getUrl(), headers));9 }10 //返回格式

11 responseModel.setCode(SUCCESS_CODE);12 responseModel.setData(content);

第三步,發(fā)送http請(qǐng)求調(diào)用接口:

HttpRequestUtils.java

1 public static String get(String url, Mapheaders) {2 RequestConfig config =RequestConfig.custom().setConnectTimeout(TIME_OUT).setConnectionRequestTimeout(TIME_OUT).setSocketTimeout(TIME_OUT).build();3 String ret = null;4 //創(chuàng)建HttpClient對(duì)象

5 CloseableHttpClient closeHttpClient =HttpClients.createDefault();6 CloseableHttpResponse httpResponse = null;7 //發(fā)送get請(qǐng)求

8 HttpGet httpGet = newHttpGet(url);9 try{10 //add header

11 if(Objects.nonNull(headers)) {12 Set keys =headers.keySet();13 for (Iterator i =keys.iterator(); i.hasNext(); ) {14 String key =i.next();15 httpGet.addHeader(key, headers.get(key));16 }17 }18

19 httpGet.setConfig(config);20 //執(zhí)行Get請(qǐng)求 得到Response對(duì)象

21 httpResponse =closeHttpClient.execute(httpGet);22 //httpResponse.getStatusLine() 響應(yīng)頭信息

23 int httpResponseCode =httpResponse.getStatusLine().getStatusCode();24

25 if (200 !=httpResponseCode) {26 logger.error("http返回值異常, httpResponseCode = " +httpResponseCode);27 }28

29 //返回對(duì)象

30 HttpEntity httpEntity =httpResponse.getEntity();31 ret = EntityUtils.toString(httpEntity, "UTF-8");32 } catch(UnsupportedEncodingException e) {33 logger.error(e.getMessage(), e);34 } catch(ClientProtocolException e) {35 logger.error(e.getMessage(), e);36 } catch(IOException e) {37 //logger.error(e.getMessage(), e);

38 } finally{39 if (httpResponse != null) {40 try{41 httpResponse.close();42 } catch(IOException e) {43 logger.error(e.getMessage(), e);44 }45 }46 if (closeHttpClient != null) {47 try{48 closeHttpClient.close();49 } catch(IOException e) {50 logger.error(e.getMessage(), e);51 }52 }53 }54 returnret;55 }

第四步,查詢數(shù)據(jù)set進(jìn)redis,之后返回查詢的數(shù)據(jù):

getPanelInfo.java

1 if (!Objects.equals(redisCache, "false")) {

2 //redisttl過(guò)期時(shí)間3 redisProxyHandler.set(redisKey, JSON.toJSONString(responseModel), REDIS_TTL);4 logger.error("set succeed!!!!!!!!!!!!!!!!");5 }

redisHandler.java

1 public void set(String key, String value, intseconds) {2 redisCacheProvider.set(key, value, seconds);3 }

redisProvider.java

1 @Autowired2 privateJedisPool jedisPool;3

4 publicJedis getJedis() {5 Jedis jedis = this.jedisPool.getResource();6 //使用index為2的database

7 jedis.select(2);8 returnjedis;9 }10

11 public void set(String key, String value, intseconds) {12 Jedis jedis = null;13 try{14 jedis =getJedis();15 jedis.setex(key, seconds, value);16 Long exp =jedis.ttl(key);17 if (exp < 0) {18 throw new RuntimeException("data time out!");19 }20 } catch(Throwable e) {21 logger.error(e.getMessage(), e);22 throw newTokenException(e.getMessage());23 } finally{24 if(jedis != null){jedis.close;}25 }26 }

第五步,請(qǐng)求接口的時(shí)候,先請(qǐng)求redis緩存,如果命中則返回命中數(shù)據(jù),否則,將執(zhí)行上面的發(fā)送http請(qǐng)求在拼湊數(shù)據(jù)返回的代碼:

getPanelInfo.java

1 String panelInfo =redisProxyHandler.get(redisKey);2 Long expire =redisProxyHandler.getExpire(redisKey);3 //命中才返回,否則會(huì)去發(fā)http請(qǐng)求

4 if (Objects.nonNull(panelInfo) && (expire > 0) && expire

redisHandler.java

1 publicString get(String key)2 returnredisCacheProvider.get(key);3 }

redisProvider.java

1 publicString get(String key) {2 String value = null;3 Jedis jedis = null;4 try{5 jedis =getJedis();6 value =jedis.get(key);7 } catch(Throwable e) {8 logger.error(e.getMessage(), e);9 throw newTokenException(e.getMessage());10 } finally{11 if(jedis != null){12 jedis.close();13 }14 }15 returnvalue;16 }

redis相關(guān)配置文件如下

applicationContext.xml

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

redis.properties

1 # 控制一個(gè)pool可分配多少個(gè)jedis實(shí)例2 redis.pool.maxTotal=10003 # 控制一個(gè)pool最多有多少個(gè)狀態(tài)為idle(空閑)的jedis實(shí)例4 redis.pool.maxIdle=2005 # 表示當(dāng)borrow一個(gè)jedis實(shí)例時(shí),最大的等待時(shí)間,如果超過(guò)等待時(shí)間,則直接拋出JedisConnectionException6 redis.pool.maxWaitMillis=20007 #在borrow一個(gè)jedis實(shí)例時(shí),是否提前進(jìn)行validate操作;如果為true,則得到的jedis實(shí)例均是可用的8 redis.pool.testOnBorrow=true9 # redis 單機(jī)10 # 單機(jī) host11 jedis.host=127.0.0.112 # 單機(jī) port13 jedis.port=6379

看了上面的代碼,我們知道一般的緩存是怎么使用的,在這個(gè)案例中,每個(gè)redisKey是根據(jù)請(qǐng)求的用戶名拼接特定的字符串生成的,每個(gè)請(qǐng)求用戶對(duì)應(yīng)的key只在redis中保存一定的時(shí)間,過(guò)了指定的過(guò)期時(shí)間REDIS_TTL,數(shù)據(jù)將會(huì)被清除掉。

總結(jié)

以上是生活随笔為你收集整理的java redis缓存理解_Java项目中使用Redis缓存案例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人免费视频网站在线观看 | 欧洲美女与动交zozzo | 一区二区三区丝袜 | 国产成人无码精品久久二区三 | 久久窝窝 | 欧美在线一卡 | 色宗合| 麻豆chinese新婚xxx| av不卡在线 | 少妇又紧又色又爽又刺激 | 久久东京 | 欧洲美女与动交zozzo | 国产精品igao视频 | 污污网站在线播放 | 欧美精品一区二区免费看 | 国产片天天弄 | 高跟av| 美女诱惑一区二区 | 手机在线免费av | av夜色 | 精品探花| 国产福利短视频 | 国产福利在线观看 | 福利视频三区 | 久久不卡影院 | 日日拍夜夜拍 | 黄瓜视频在线免费看 | 97se在线视频 | 欧美性受视频 | 国产粉嫩av | 午夜影院免费体验区 | 亚洲熟妇无码av | 国产精品二区在线 | 美女高潮视频在线观看 | 欧美freesex黑人又粗又大 | 自拍偷拍视频网站 | 国产99久久久久久免费看 | 热逼视频| 成人在线视频一区二区三区 | 极品销魂美女少妇尤物 | 视频免费在线观看 | 天堂在线成人 | 精品国产欧美日韩 | 伊人网av| 欧美特级a | 波岛野结衣| 久久av资源网 | 艳妇臀荡乳欲伦交换电影 | 免费在线观看污网站 | 欧洲美熟女乱又伦 | aaa一级片 | 中文亚洲字幕 | 在线黄色网 | 99这里精品 | 免费在线观看成人av | 国产手机av在线 | 桃色在线视频 | 日韩免费电影一区 | 五月色婷婷综合 | 免费看黄色三级三级 | 男人日女人b视频 | 欧美老女人视频 | 无码人妻丰满熟妇区毛片蜜桃精品 | 黄色国产一级 | 成人性生交大片免费看vrv66 | 中文写幕一区二区三区免费观成熟 | 激情网久久 | wwyoujizzcom| 国产三级在线观看视频 | 99久久久国产精品 | 高清视频免费在线观看 | 国产精品黄视频 | 一本久道久久 | 成人精品一区日本无码网 | 蜜臂av| 精品视频 | 久久蜜桃av | 成人午夜在线 | 操操操网站 | 一本一道久久综合 | 老师的肉丝玉足夹茎 | 波多野结衣伦理 | 精品在线一区 | 欧美性www| 色小妹av| 在线国产一区二区 | 成人狠狠干 | 91尤物视频在线观看 | 超碰99热| 国产不卡视频 | 中文字幕在线网 | 欧美日韩在线播放视频 | 欧美精品二区三区四区免费看视频 | 女女综合网 | 亚洲av片不卡无码久久 | 天天摸夜夜操 | 欧美 日韩 中文字幕 | 亚洲二区av| 在线播放你懂的 |