category
分類的數據在每一次頁面加載後都會重新請求數據庫來加載,對數據庫的壓力比較大,而且分類的數據不會經常產生變化,所有可以使用redis來緩存這個數據。
@Override
public List<Category> findAll() {
//每一次加載首頁,都有從數據庫去讀取分類的信息
//缺點:服務器壓力大
//用戶體驗差(等待頁面整個加載完)
//改進:使用redis技術
/***
* 1.應該從JedisUtils獲取redis的客戶端的對象:Jedis
*/
Jedis jedis = JedisUtil.getJedis();
//2.獲取到客戶端對象,操作redis數據庫
//應該先判斷redis是否存在一個key名字"category"的信息範圍(Set集合)
// zrange key 0 -1
//查詢當前key中記錄的所有信息 //zadd key field value
// Set<String> categorys = jedis.zrange("category", 0, -1);
//改進:獲取分類id
Set<Tuple> categorys = jedis.zrangeWithScores("category",0,-1) ;
//reids 數據結構:sortedset
//聲明List<Category>集合對象
List<Category> list = null ;
//3.判斷當前redis是否存在categorys集合數據
if(categorys==null || categorys.size()==0){
System.out.println("從數據庫中獲取分類信息...");
//調用CategoryDao中查詢所有分類信息
list = categoryDao.findAll() ; //第一次從數據庫如果查詢到了,將信息直接存儲到redis中
//遍歷集合,獲取每一個Category對象
for(int i = 0 ; i <list.size() ; i++){
//將當前cid和cname存儲到redis中
//查詢旅遊分類的value
jedis.zadd("category",list.get(i).getCid(),list.get(i).getCname()) ;
}
}else{
//不爲空,將Set<String>---->List<Category>
System.out.println("從redis數據庫中獲取分類信息....");
//創建List<Category>對象
list = new ArrayList<Category>() ;
//創建Category對象
/*Category category = new Category() ;
for(String name:categorys){
// category.setCid(category.getCid()); //0
category.setCname(name);
list.add(category) ;
}*/
;
for(Tuple tuple:categorys){
Category category = new Category() ;
//Tuple :getElement():獲取成員信息(分類名稱)
//獲取score(對應的分類id)
category.setCname(tuple.getElement());
category.setCid((int)tuple.getScore());
//將分類的實體對象添加到List集合
list.add(category) ;
}
}
// return categoryDao.findAll();
return list ;
}
前臺代碼
//頁面載入事件
$(function () {
//直接發送一個異步get提交
$.get("user/findUser",{},function (data) {
//接收服務器響應過來的User的姓名{uid:xx,username:xx,password:xx,name:'張三'}
var msg = "歡迎回來,"+data.name ;
$("#span_username").html(msg) ;
}) ;
//發送ajax,加載index.html的時候,應該從後臺查詢數據庫獲取分類信息
$.get("category/findAll",{},function (data) {
//data:list集合
var lis = "" ;
lis += ' <li class="nav-active"><a href="index.html">首頁</a></li>' ;
// <li><a href="route_list.html">門票</a></li>
//將當前的data遍歷
for(var i = 0 ; i < data.length;i++){
//點擊分類信息的時候,執行跳轉到列表頁面,應該傳遞分類id(cid)
lis+='<li><a href="route_list.html?cid='+data[i].cid+'">'+data[i].cname+'</a></li>' ;
}
//<li><a href="favoriterank.html">收藏排行榜</a></li>
lis += '<li><a href="favoriterank.html">收藏排行榜</a></li>' ;
//將lis的信息作爲ul標籤的子標籤(文本內容)
$("#category").html(lis) ;
}) ;
}) ;