当前第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存放日志及热门文章的详细内容,更多文章请关注木庄网络博客!
返回前面的内容
相关阅读 >>
Redis中5种数据类型基本命令介绍
为什么Redis可以做分布式锁
Redis是关系型数据库吗
linux查看Redis是否启动
为什么说Redis是单线程的
Redis自定义systemctl管理服务
Redis5.0新特性
Redis运维之慢查询日志
2个Redis怎么配
Redis是否线程安全
更多相关阅读请进入《Redis》频道 >>
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » Redis存放日志及热门文章