Redis存放日志及热门文章


当前第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中

$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) {

        // 从日志列表里去日志信息,一次取50条

        for ($start = 0, $end = 49;true;$start +=50, $end+=50) {

            $logs = $redis->lrange($logkey, $start, $end);

            if (!$logs) break;

            // 将日志信息解压缩,然后追加写入文本文件中

             ……

              

            // 删除该日志列表

            $redis->del($logkey);

        }  

    } else {

        // 一个月之内的,重新push到左侧

        $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》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...