1. 程式人生 > >用Redis實現快取以及快取同步

用Redis實現快取以及快取同步

使用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、實現快取的同步

在每次更新資料後,如果上次的快取資料仍保留著,那麼在查詢時依然會讀取到快取中的舊資料,這時候需要實現快取同步,最簡單的做法就是在每次更新操作後,刪去該資料的快取,讓下一次訪問時找不到該快取,從而讀取資料庫中的實時資料