在現在的很多項目,基本上都需要引入緩存機制,那么緩存到底是什么呢?
緩存 也就是數據交互的緩沖區 Cache
在java-web項目中實現緩存,也就是需要首先把數據庫需要用到的數據備份一份作為副本,當我們以同樣的url請求的時候,這時候就不需要再次調用查詢數據庫的操作,只需要把提前預存的副本拿出來即可。
這樣的好處也就不言而喻,不僅可以加快執行命令的速度,而且需要用到的流量更少
下面我們通過添加一個大廣告的程序來引入和解析緩存
1 首先在查詢大廣告的時候
try {
//嘗試從Redis中取出數據
String hgetresult = jedisDao.hget(INDEX_CONTENT_REDIS_KEY, contentCategoryId+"");
//判斷字符串是否為空
if (!StringUtils.isBlank(hgetresult)) {
List<TbContent> jsonToList = (List<TbContent>)JsonUtils.jsonToList(hgetresult,TbContent.class);
System.out.println("從緩存中取出首頁信息");
return jsonToList;
}
} catch (Exception e) {
// TODO: handle exception
}
INDEX_CONTENT_REDIS_KEY就是保存在redis中的key,
hget為獲取指定id的緩存數據的方法
//將數據庫中查詢到的內容存在Redis緩存中
//轉字符串
String json = JsonUtils.objectToJson(list);
try {
jedisDao.hset(INDEX_CONTENT_REDIS_KEY, contentCategoryId+"", json);
System.out.println("存入緩存");
} catch (Exception e) {
// TODO: handle exception
}
return list;
2 在我們真正插入新廣告的時候需要清空舊緩存,這時候代碼如下
HttpClientUtil.doGet(REST_BASE_URL+REST_INDEX_CONTENT_URL+"/"+content.getCategoryId());
這句代碼的主要含義是請求到hdel函數內,清空指定id 的緩存
@Override
public long hdel(String hkey, String key) {
Jedis jedis = jedisPool.getResource();
// TODO Auto-generated method stub
Long hdel = jedis.hdel(hkey, key);
jedis.close();
return hdel;
}
思路連在一塊也就是
當我們新添加一個數據的時候,這時候舊的緩存已經過時了,直接清空需要更新的緩存,添加完成回到查詢界面,根據緩存是否為空來判斷是否需要更新緩存,如果為空,則更新最新緩存
這樣像廣告這種消耗大量流量並且需要重復請求的,只需要請求本地緩存就可以了。
