当前第2页 返回上一页
可以使用压缩函数将日志信息压缩,减少内存占用。另外,再维护一个列表存日志列表的键名,方便取出日志列表键名。存放日志的伪代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 | $log = ...
$key = 'log:' . strtotime ( date ( 'Y-m-d' ));
if (! $redis ->exists( $key )) {
$listlogkey = 'log:key' ;
$redis ->rpush( $listlogkey , $key );
}
$redis ->rpush( $key , $log );
|
定时任务代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | $lastMonth = strtotime ( "-30 day" );
while ( $logkey = $redis ->lpop( 'log:key' )) {
$logTime = explode ( ':' , $logkey )[1];
if ( $logTime < $lastMonth ) {
for ( $start = 0, $end = 49;true; $start +=50, $end +=50) {
$logs = $redis ->lrange( $logkey , $start , $end );
if (! $logs ) break ;
……
$redis ->del( $logkey );
}
} else {
$redis ->lpush( 'log:key' , $logkey );
exit ;
}
}
|
这里有几点需要注意,如果持久化日志失败后,或者是近一个月内的日志,需要重新将日志列表键名从左侧push。另外,从日志列表里取日志时,不要一次性全部取出,这样容易导致redis阻塞。每次,取一定数量(如50条),循环取出。
存放热门新闻ID
这里,就不贴代码了,主要讲讲思路。以前我弄个一个系统,有一个版单功能,有今日最热、一周最热、一月最热。当时,我们的网站流量还挺大的,过不了几天,网站就挂了。原因是,mysql的慢查询问题。因为,这块的sql有分组、COUNT()、条件判断等。
和大家说说我们的解决方案:写一个mysql的存储过程,定时调用存储过程。该存储过程的作用是,筛选出今日、一周、一月最热文章,分别取100条文章id,将其文章id存放到redis的队列中。最热文章,我们只展示前100条。这样,我们的系统就没有了慢查询了。
以上就是Redis存放日志及热门文章的详细内容,更多文章请关注木庄网络博客!
返回前面的内容
相关阅读 >>
windows下如何正确安装Redis
Redis性能监控指标总结
Redis 更新(set) key值过期时间被重置
为什么Redis是单线程、及高并发快原因详解
Redis可以存储多少数据
一般什么数据存储到Redis里
Redis集群为什么最少需要6个节点
Redis如何实现持久化方案(rdb和aof使用)
介绍Redis性能监控
Redis秒杀场景解决方案
更多相关阅读请进入《Redis》频道 >>
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » Redis存放日志及热门文章