用Redis實現快取以及快取同步
阿新 • • 發佈:2019-02-07
使用Redis做快取的大體思路是,在相應的資料獲取層,將獲取到的資料儲存一份到Redis中,在下次請求該資料之前,先在Redis中搜索該資料並提取出來,實現快取的快速讀取。
1、傳統開發模式
多次請求資料庫,資料庫壓力高,系統響應慢
2、使用Redis做快取的開發模式
首次請求資料庫,並將資料存入Redis中實現快取,短時間內再次讀取時只需從快取中獲取,大大減少資料庫壓力和提高響應速度
3、具體程式碼實現
十分簡單(在使用Redis之前需要在伺服器中搭建Redis,並在spring中註冊Jedis,具體不再贅述):
/** * 查詢內容 */ @Override public List<TbContent> findContent(Long CATAGORY_LUNBO_ID) { String cid = CATAGORY_LUNBO_ID.toString(); //查詢到快取 try { String content_lunbo_string = jedisClient.hget(CONTENT_LUNBO,cid); if(StringUtils.isNotBlank(content_lunbo_string)){ //快取存在 //轉化為相應的list List<TbContent> contentList = JsonUtils.jsonToList(content_lunbo_string, TbContent.class); return contentList; } } catch (Exception e) { e.printStackTrace(); } //查詢不到該快取,查詢資料庫 TbContentExample example = new TbContentExample(); com.iteason.pojo.TbContentExample.Criteria criteria = example.createCriteria(); //設定條件 criteria.andCategoryIdEqualTo(CATAGORY_LUNBO_ID); List<TbContent> contentList = tbContentMapper.selectByExample(example); //新增list轉化為json到快取中 String contentJson = JsonUtils.objectToJson(contentList); //新增hash快取格式為:key filed value try { jedisClient.hset(CONTENT_LUNBO,cid, contentJson); } catch (Exception e) { e.printStackTrace(); } return contentList; }
4、實現快取的同步
在每次更新資料後,如果上次的快取資料仍保留著,那麼在查詢時依然會讀取到快取中的舊資料,這時候需要實現快取同步,最簡單的做法就是在每次更新操作後,刪去該資料的快取,讓下一次訪問時找不到該快取,從而讀取資料庫中的實時資料