利用redis有序集合实现实时更新阅读排行榜
2017-03-03 19:28
477 查看
获取代码:
更新点击量
/** * 获取排行榜 */ public function getHotImage($num=6) { //获取redis排行榜有序集合 $hotImageIds = $this->getHotImageIds($num); $ids = implode(',',$hotImageIds); $redisKey = CommonConst::MODULE_ID . __METHOD__ . md5($ids); if ($this->publicRedis->exists($redisKey)) { return json_decode($this->publicRedis->get($redisKey), true); } $pic_list = $this->publicDao->getListByIds($ids); if($pic_list['data']){ $this->publicRedis->setex($redisKey, 10 * 24 * 3600, json_encode($pic_list)); } return $pic_list; } /** * 获取排行榜ID */ public function getHotImageIds($num=6) { //获取redis排序集合 $hot_redisKey = CommonConst::MODULE__ID .'_'. __METHOD__; $hotImageIds = array(); if ($this->publicRedis->exists($hot_redisKey)) { return $this->publicRedis->zRevRange($hot_redisKey,0,-1); } $images = $this->publicDao->getList(array('status'=>1),array('view_num'=>'desc'),array(0,$num)); if($images){ foreach($images as $val){ $this->publicRedis->zAdd($hot_redisKey, $val['view_num'], $val['id']); } $hotImageIds = $this->publicRedis->zRevRange($hot_redisKey,0,-1); } return $hotImageIds; }
更新点击量
/** * 增加点击数 */ public function addHits($image_id,$now_hits,$hits=1){ $ret = $this->publicDao->update(array('id'=>$image_id),array('view_num'=>$now_hits+$hits)); if($ret){ $hot_redisKey = CommonConst::MODULE_ID . '_Bn_ImagesService::getHotImageIds'; //获取现有点击数 $score = $this->publicRedis->zScore($hot_redisKey,$image_id); if($score){ //如果有,incr增加1 $this->publicRedis->zIncrBy($hot_redisKey,$hits,$image_id); }else{ //查询排行列表是否有小于等于当前播放量的数据 $less_member = $this->publicRedis->zRangeByScore($hot_redisKey,0,$now_hits,array('limit' => array(0, 1))); if($less_member){ //删除小于当前播放量的元素 $this->publicRedis->zDelete($hot_redisKey,$less_member[0]); //将当前元素增加至集合 $this->publicRedis->zAdd($hot_redisKey, $now_hits+$hits,$image_id); } } } return $ret; }
相关文章推荐
- redis之有序集合类型(Zset)——排行榜的实现
- Android开发——利用Cursor+CursorAdapter实现界面实时更新
- redis有序集合实现撒花逻辑
- android中的websocket 应用 websocket 在实际的应用中不仅仅能做聊天应用,还可以利用websocket长连接保持数据的实时更新以及信息的推送。 websocket 的实现的
- Power BI 利用Streaming Dataset 实现实时更新
- 利用Cursor+CursorAdapter实现界面实时更新
- Redis源码剖析和注释(十三)--- 有序集合类型键实现(t_zset)
- 利用Redis的有序集合做购物车商品相关性分析
- Android开发——利用Cursor+CursorAdapter实现界面实时更新
- Android开发——利用Cursor+CursorAdapter实现界面实时更新
- 利用javaScript实现时间实时更新
- 利用jquery实现实时更新歌词的方法
- redis 有序集合数据结构实现 skiplist
- 《Redis设计与实现 黄建宏 著》阅读笔记目录(持续更新)
- 多个redis有序集合组合如何实现分页
- Redis 有序聚合实现排行榜功能
- Android开发——利用Cursor+CursorAdapter实现界面实时更新
- 利用AJAX实现DropDownList与GridView做实时更新
- Redis源码剖析(十二)有序集合跳表实现
- 利用AJAX实现DropDownList与GridView做实时更新