redis用于记录

twb*_*twb 12 logging redis

我正在考虑使用Redis进行Web应用程序日志记录.我用谷歌搜索有人使用这种方法,将日志转储到Redis队列/列表,然后将计划工作人员写入磁盘.

http://nosql.mypopescu.com/post/8652869828/another-redis-use-case-centralized-logging

我想了解为什么不直接使用Redis持久存储到磁盘?如果我已经分配了一个Redis将写入的小型服务器,与数据库,应用服务器分开,是否可以使用Redis直接保存日志?

我还需要帮助按日期时间,用户等查询Redis.例如,每个日志如下.

datetime=>2012-03-24 17:45:12
userid=>123
message=>test message
category=>my category
Run Code Online (Sandbox Code Playgroud)

如何在特定用户的特定类别的日期时间范围内查询结果?

谢谢!

Did*_*zia 22

您需要记住,Redis是一个内存数据库(即使它可以将数据保存到磁盘).您放入Redis的数据必须适合内存.

您提到的文章中的提议是将Redis用作分布式排队系统.工作进程将项目出列并将其写入磁盘,因此Redis内存中没有那么多项目.这种设计有一个缺陷:如果工作进程无法足够快地将数据写入磁盘,Redis内存消耗将会爆炸 - 因此必须受配置(Redis maxmemory参数)或软件限制(在插入​​时修剪队列,或为空队列满了).

现在你的提议并没有真正起作用,因为你在Redis中编写的所有数据都将保存在内存中(即使它们由Redis本身保存到磁盘).

另一点是你无法查询Redis.Redis不是关系数据库,它不支持ad-hoc查询机制,只支持涉及先前定义的访问路径的命令.如果要搜索具有不同参数的数据,则必须预测所有可能的搜索并在插入时构建相关的数据结构(集合,排序集等).

另一个商店(MongoDB或关系数据库)可能更适合您的用例.

  • Redis旨在支持lloogg(http://lloogg.com/).但是lloogg服务并不是要将所有内容保存在内存中,然后处理查询.它是关于在正确的数据结构内即时存储/聚合数据,允许轻松访问数据.这不是一回事. (3认同)

mrd*_*ded 9

您可以使用以下结构存储日志:

"logs:{category}:{userid}:{datetime}" = message
Run Code Online (Sandbox Code Playgroud)

然后请求如下:

"logs:*:{userid}:{datetime}"
Run Code Online (Sandbox Code Playgroud)

要么

"logs:{category}:*:{datetime}"
Run Code Online (Sandbox Code Playgroud)