redis怎么做緩存

redis怎么做緩存

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
喜歡就支持一下吧
點贊13 分享