【问题标题】:Use redis for log caching: Is it possible to create an eviction policy that evicts to PostgreSQL?使用 redis 进行日志缓存:是否可以创建驱逐到 PostgreSQL 的驱逐策略?
【发布时间】:2018-12-13 10:36:37
【问题描述】:

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

read about LRU caching 的 redis 似乎很合适,但是 LRU 缓存似乎更面向读取数据而不是写入。换句话说,那里描述的场景听起来像是如果我想从持久性数据库中读取某些内容,并且为了避免多次读取(访问)该持久性数据库,我将那个值写入redis缓存并重复使用它.但我想做相反的事情。我的日志系统会将日志消息写入 redis,然后我希望它们以预定义的模式被“驱逐”到 PostgreSQL。

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

PS:请随时提出更好的日志缓存机制。

【问题讨论】:

    标签: c++ postgresql caching logging redis


    【解决方案1】:
    1. 如果要write efficiency,我建议leveldbrocksdb,都是Log-Structured-Merge-Database (LSM)设计,写性能好,读性能也好。

      Google Leveldb

      Facebook Rocksdb

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

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

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

    【讨论】:

    • 我认为不可能将 LRU 与 postgres 一起使用,甚至不能与插件一起使用......感谢您提供的信息。如果没有更好的答案出现,我会接受这个。
    猜你喜欢
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 2018-03-23
    相关资源
    最近更新 更多