我正在考虑将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
如何在特定类别的特定用户的日期时间范围内查询结果?
谢谢!
您需要记住,Redis是内存数据库(即使它可以将数据持久保存到磁盘)。您放入Redis的数据必须容纳在内存中。
您提到的文章中的建议是关于将Redis用作分布式排队系统。Worker进程将项目出队并写入磁盘,因此Redis内存中没有多少项目。这种设计有一个缺陷:如果工作进程无法将数据足够快地写入磁盘,Redis的内存消耗将激增- 因此,它必须受到配置(Redis maxmemory参数)或软件(在插入时修剪队列,或者清空)的限制。队列已满)。
现在,您的建议实际上并不起作用,因为您在Redis中写入的所有数据都将保留在内存中(即使它们由Redis本身持久保存到磁盘中)。
另一点是您无法查询Redis。Redis不是关系数据库,它不支持即席查询机制,仅支持涉及先前定义的访问路径的命令。如果要使用不同的参数搜索数据,则必须在插入时预见所有可能的搜索并构建相关的数据结构(集合,排序集合等)。
另一个商店(MongoDB或关系数据库)可能更适合您的用例。