像網易新聞收藏的功能,如果使用redis做緩存的話,應該如何實現?
业精于勤,荒于嬉;行成于思,毁于随。
如果新聞有ID或唯一識別碼的話。可以考慮用redis的集合類型。而且集合的唯一性,防止了重複添加問題! redis.sadd('personmark:userID',newsID);//新增一個元素到使用者集合中 redis.smembers('personmark:userID');//一次取得使用者所有收集的新聞ID
使用排序集合zset; key為使用者ID; member為新聞唯一性ID; score為以之前某一天開始的日期增量(例如,從2015-1-1日開始算,今天的score就是155?);有了score之後就取出來就不用再排序,直接顯示; zadd(key, score, member):新增新聞 zrank(key, member):按score從小到大返回,也就是收藏的新聞按日期從新往舊排序; zrangebyscore(key, min, max):傳回score從start到end的集合,用來實現新聞的翻頁顯示;
key: news_fav_uid value: 新聞ID的集合(數組) 其中uid是用戶ID. $news_ids = array(1024,1025,1026); echo json_encode($news_ids); 無論你用的是Memcached/Redis/MySQL都可以這樣儲存. array_push把新的收藏壓到$news_ids數組的末尾. 你要按時間排序,只需要json_decode解碼後array_reverse翻轉數組後foreach輸出.
1樓的答案很好了,只是來補充一句,這裡沒必要把redis當成快取了,直接當作資料儲存吧,因為redis也是資料庫
如果新聞有ID或唯一識別碼的話。可以考慮用redis的集合類型。而且集合的唯一性,防止了重複添加問題!
redis.sadd('personmark:userID',newsID);//新增一個元素到使用者集合中
redis.smembers('personmark:userID');//一次取得使用者所有收集的新聞ID
使用排序集合zset;
key為使用者ID;
member為新聞唯一性ID;
score為以之前某一天開始的日期增量(例如,從2015-1-1日開始算,今天的score就是155?);有了score之後就取出來就不用再排序,直接顯示;
zadd(key, score, member):新增新聞
zrank(key, member):按score從小到大返回,也就是收藏的新聞按日期從新往舊排序;
zrangebyscore(key, min, max):傳回score從start到end的集合,用來實現新聞的翻頁顯示;
key: news_fav_uid
value: 新聞ID的集合(數組)
其中uid是用戶ID.
$news_ids = array(1024,1025,1026);
echo json_encode($news_ids);
無論你用的是Memcached/Redis/MySQL都可以這樣儲存.
array_push把新的收藏壓到$news_ids數組的末尾.
你要按時間排序,只需要json_decode解碼後array_reverse翻轉數組後foreach輸出.
1樓的答案很好了,只是來補充一句,這裡沒必要把redis當成快取了,直接當作資料儲存吧,因為redis也是資料庫