redis常本用來作為緩存服務器。緩存的好處是減少服務器的壓力,數據查詢速度快。解決數據響應慢的問題。
添加緩存:只用redis的Hash數據類型添加緩存。? ? ? ? ? ? ? ? ? (推薦學習:Redis視頻教程)
例如:需要在查詢的業務功能中,添加緩存
1.首先需要在執行正常的業務邏輯之前(查詢數據庫之前),查詢緩存,如果緩存中沒有需要的數據,查詢數據庫
為了防止添加緩存出錯,影響正常業務代碼的執行,將添加緩存的代碼放置到try-catch代碼快中,讓程序自動捕獲。
2.完成數據庫的查詢操作,查詢完成之后需要將查詢的數據添加到緩存中。
代碼:
@Override ????public?List<tbcontent>?findContentByCategoryId(Long?categoryId)?{ ????????//?查詢出的內容列表可以添加到緩存中,便于展示,為了保證添加緩存出現錯誤不影響程序的正常業務功能,可以使用try?catch的方式加緩存 ????????try?{ ????????????String?json?=?jedisClient.hget(CONTENT_LIST,?categoryId?+?""); ????????????if?(json?!=?null)?{ ????????????????List<tbcontent>?list?=?JsonUtils.jsonToList(json,?TbContent.class); ????????????????return?list; ????????????} ????????}?catch?(Exception?e)?{ ????????????e.printStackTrace(); ????????} ????????TbContentExample?example?=?new?TbContentExample(); ????????Criteria?criteria?=?example.createCriteria(); ????????criteria.andCategoryIdEqualTo(categoryId); ????????//?使用selectByExampleWithBLOBs方法會將content屬性框中的內容也查詢出來 ????????List<tbcontent>?list?=?contentMapper.selectByExampleWithBLOBs(example); ????????//?操作完成后需要將查詢的內容添加到緩存中,因為添加緩存的過程可能出錯,所以使用try?catch將異常拋出即可 ????????//?categoryId+""將Long類型的數據轉換成String類型的 ????????try?{ ????????????jedisClient.hset(CONTENT_LIST,?categoryId?+?"",?JsonUtils.objectToJson(list)); ????????}?catch?(Exception?e)?{ ????????????e.printStackTrace(); ????????} ????????return?list; ????}</tbcontent></tbcontent></tbcontent>
Json轉換的工具類:
package?nyist.e3.utils; import?java.util.List; import?com.fasterxml.jackson.core.JsonProcessingException; import?com.fasterxml.jackson.databind.JavaType; import?com.fasterxml.jackson.databind.ObjectMapper; /** ?*?淘淘商城自定義響應結構 ?*/ public?class?JsonUtils?{ ????//?定義jackson對象 ????private?static?final?ObjectMapper?MAPPER?=?new?ObjectMapper(); ????/** ?????*?將對象轉換成json字符串。 ?????*?<p>Title:?pojoToJson</p> ?????*?<p>Description:?</p> ?????*?@param?data ?????*?@return ?????*/ ????public?static?String?objectToJson(Object?data)?{ ????????try?{ ????????????String?string?=?MAPPER.writeValueAsString(data); ????????????return?string; ????????}?catch?(JsonProcessingException?e)?{ ????????????e.printStackTrace(); ????????} ????????return?null; ????} ???? ????/** ?????*?將json結果集轉化為對象 ?????*? ?????*?@param?jsonData?json數據 ?????*?@param?clazz?對象中的object類型 ?????*?@return ?????*/ ????public?static?<t>?T?jsonToPojo(String?jsonData,?Class<t>?beanType)?{ ????????try?{ ????????????T?t?=?MAPPER.readValue(jsonData,?beanType); ????????????return?t; ????????}?catch?(Exception?e)?{ ????????????e.printStackTrace(); ????????} ????????return?null; ????} ???? ????/** ?????*?將json數據轉換成pojo對象list ?????*?<p>Title:?jsonToList</p> ?????*?<p>Description:?</p> ?????*?@param?jsonData ?????*?@param?beanType ?????*?@return ?????*/ ????public?static?<t>List<t>?jsonToList(String?jsonData,?Class<t>?beanType)?{ ????????JavaType?javaType?=?MAPPER.getTypeFactory().constructParametricType(List.class,?beanType); ????????try?{ ????????????List<t>?list?=?MAPPER.readValue(jsonData,?javaType); ????????????return?list; ????????}?catch?(Exception?e)?{ ????????????e.printStackTrace(); ????????} ???????? ????????return?null; ????} ???? }</t></t></t></t></t></t>
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END