Redis 快照重载内存

标签 redis

我正在使用 Redis 作为客户端缓存机制。 使用 stackexchange.redis 通过 C# 实现。 我将快照配置为“save 5 1”并且打开了 rdbcompression。 RDB机制在每次需要追加数据时,都会将rdb文件加载到内存中。 问题是当你有一个相当大的 RDB 文件并且它被一次性加载到内存中时。它会阻塞普通端点的内存、磁盘和 CPU。

有没有办法在不将整个文件加载到内存的情况下更新 rdb 文件? 也欢迎任何其他降低内存和 cpu 负载的解决方案。

最佳答案

The RDB mechanism loads the rdb file to memory every time it needs to append data.

这不是开源 Redis 服务器所做的(其他变体,例如 MSFT 分支,可能表现不同)- RDB 是通过使用分支进程将内存内容复制到磁盘来创建的。转储的文件永远不会加载,除非用于恢复。由于写时复制 (COW) 机制,保存过程中增加的内存使用量取决于转储过程中执行的写入量。

Also any other solution that lowers the load on the memory and cpu is welcome.

有多种方法可以解决这个问题,具体取决于您的要求和预算。这些包括:

  • 同时使用 RDB 和 AOF 进行数据持久化,从而减少转储频率。
  • 将持久性委托(delegate)给从属实例。
  • 对您的数据库进行分片并执行级联转储。

关于Redis 快照重载内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34974819/

相关文章:

django - 在我的 Django 应用程序中使用 Celery 和 Redis

javascript - Node Redis : Multiple queries in different redis databases with same client

asp.net-mvc-4 - 无法从程序集“StackExchange.Redis”加载类型 'StackExchange.Redis.HashEntry'

javascript - Node.js 代码执行顺序

python - 在 redis session 中保存静态文件(Python flask)

laravel - laravel事件在真实聊天应用中生成错误

django - 如何从 celery-django 项目安全连接到 Azure redis?

javascript - 如何在 JavaScript 和 Scala 之间进行实时通信

azure - 使用 Redlocks 获取 Azure Redis 缓存上的锁

redis - 如何将redis与kong api网关一起使用