我正在考虑使用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或关系数据库)可能更适合您的用例.
您可以使用以下结构存储日志:
"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)
| 归档时间: |
|
| 查看次数: |
15483 次 |
| 最近记录: |