使用 redis 进行日志缓存:是否可以创建逐出到 PostgreSQL 的逐出策略?



我有一个新编写的系统(用C++编写的(,我希望至少在系统证明可靠之前要完成大量日志记录。我计划将数据库消息存储到 PostgreSQL 服务器,但为了提高效率,我想先在 Redis 中缓存,在那里我写到 Redis,然后如果消息超过一定大小,我会将它们转储到持久数据库,稍后可以在那里导航。

我读过关于 redis 的 LRU 缓存,它似乎很合适,但是 LRU 缓存似乎更倾向于读取数据而不是写入。换句话说,那里描述的场景听起来像是我想从持久数据库中读取某些内容,为了避免多次读取(访问(该持久数据库,我获取该值并将其写入 redis 缓存并重复使用它。但我想反其道而行之。我的日志记录系统会将日志消息写入 redis,然后我希望它们在预定义的架构中被"逐出"到 PostgreSQL。

有没有办法让我编写一个 Redis 插件来实现这一点?我似乎找不到任何关于这方面的文献或例子。

PS:请随时建议更好的日志缓存机制。

  1. 如果要write efficiency,我建议leveldbrocksdb,两者都是Log-Structured-Merge-Database (LSM)设计,既有出色的写入性能,也有很好的读取性能。

    Google Leveldb

    Facebook Rocksdb

  2. 如果你想使用redispostgres,我认为你可以使用redis作为job-queue。 将log-message写入队列,并设置一些worker以从队列中检索log-message并写入postgres

    在这种情况下,您可以考虑: 芹菜

    或者使用 redisList自己实现job-queue:使用LPUSH存储log-messageLPOP检索log-message,然后将它们写入postgres

最新更新